equal
deleted
inserted
replaced
815 if f is None: |
815 if f is None: |
816 return False |
816 return False |
817 self._load() |
817 self._load() |
818 dir, subpath = _splittopdir(f) |
818 dir, subpath = _splittopdir(f) |
819 if dir: |
819 if dir: |
820 if dir in self._lazydirs: |
820 self._loadlazy(dir) |
821 self._loadlazy(dir) |
|
822 |
821 |
823 if dir not in self._dirs: |
822 if dir not in self._dirs: |
824 return False |
823 return False |
825 |
824 |
826 return self._dirs[dir].__contains__(subpath) |
825 return self._dirs[dir].__contains__(subpath) |
829 |
828 |
830 def get(self, f, default=None): |
829 def get(self, f, default=None): |
831 self._load() |
830 self._load() |
832 dir, subpath = _splittopdir(f) |
831 dir, subpath = _splittopdir(f) |
833 if dir: |
832 if dir: |
834 if dir in self._lazydirs: |
833 self._loadlazy(dir) |
835 self._loadlazy(dir) |
|
836 |
834 |
837 if dir not in self._dirs: |
835 if dir not in self._dirs: |
838 return default |
836 return default |
839 return self._dirs[dir].get(subpath, default) |
837 return self._dirs[dir].get(subpath, default) |
840 else: |
838 else: |
842 |
840 |
843 def __getitem__(self, f): |
841 def __getitem__(self, f): |
844 self._load() |
842 self._load() |
845 dir, subpath = _splittopdir(f) |
843 dir, subpath = _splittopdir(f) |
846 if dir: |
844 if dir: |
847 if dir in self._lazydirs: |
845 self._loadlazy(dir) |
848 self._loadlazy(dir) |
|
849 |
846 |
850 return self._dirs[dir].__getitem__(subpath) |
847 return self._dirs[dir].__getitem__(subpath) |
851 else: |
848 else: |
852 return self._files[f] |
849 return self._files[f] |
853 |
850 |
854 def flags(self, f): |
851 def flags(self, f): |
855 self._load() |
852 self._load() |
856 dir, subpath = _splittopdir(f) |
853 dir, subpath = _splittopdir(f) |
857 if dir: |
854 if dir: |
858 if dir in self._lazydirs: |
855 self._loadlazy(dir) |
859 self._loadlazy(dir) |
|
860 |
856 |
861 if dir not in self._dirs: |
857 if dir not in self._dirs: |
862 return '' |
858 return '' |
863 return self._dirs[dir].flags(subpath) |
859 return self._dirs[dir].flags(subpath) |
864 else: |
860 else: |
868 |
864 |
869 def find(self, f): |
865 def find(self, f): |
870 self._load() |
866 self._load() |
871 dir, subpath = _splittopdir(f) |
867 dir, subpath = _splittopdir(f) |
872 if dir: |
868 if dir: |
873 if dir in self._lazydirs: |
869 self._loadlazy(dir) |
874 self._loadlazy(dir) |
|
875 |
870 |
876 return self._dirs[dir].find(subpath) |
871 return self._dirs[dir].find(subpath) |
877 else: |
872 else: |
878 return self._files[f], self._flags.get(f, '') |
873 return self._files[f], self._flags.get(f, '') |
879 |
874 |
880 def __delitem__(self, f): |
875 def __delitem__(self, f): |
881 self._load() |
876 self._load() |
882 dir, subpath = _splittopdir(f) |
877 dir, subpath = _splittopdir(f) |
883 if dir: |
878 if dir: |
884 if dir in self._lazydirs: |
879 self._loadlazy(dir) |
885 self._loadlazy(dir) |
|
886 |
880 |
887 self._dirs[dir].__delitem__(subpath) |
881 self._dirs[dir].__delitem__(subpath) |
888 # If the directory is now empty, remove it |
882 # If the directory is now empty, remove it |
889 if self._dirs[dir]._isempty(): |
883 if self._dirs[dir]._isempty(): |
890 del self._dirs[dir] |
884 del self._dirs[dir] |
897 def __setitem__(self, f, n): |
891 def __setitem__(self, f, n): |
898 assert n is not None |
892 assert n is not None |
899 self._load() |
893 self._load() |
900 dir, subpath = _splittopdir(f) |
894 dir, subpath = _splittopdir(f) |
901 if dir: |
895 if dir: |
902 if dir in self._lazydirs: |
896 self._loadlazy(dir) |
903 self._loadlazy(dir) |
|
904 if dir not in self._dirs: |
897 if dir not in self._dirs: |
905 self._dirs[dir] = treemanifest(self._subpath(dir)) |
898 self._dirs[dir] = treemanifest(self._subpath(dir)) |
906 self._dirs[dir].__setitem__(subpath, n) |
899 self._dirs[dir].__setitem__(subpath, n) |
907 else: |
900 else: |
908 self._files[f] = n[:21] # to match manifestdict's behavior |
901 self._files[f] = n[:21] # to match manifestdict's behavior |
919 def setflag(self, f, flags): |
912 def setflag(self, f, flags): |
920 """Set the flags (symlink, executable) for path f.""" |
913 """Set the flags (symlink, executable) for path f.""" |
921 self._load() |
914 self._load() |
922 dir, subpath = _splittopdir(f) |
915 dir, subpath = _splittopdir(f) |
923 if dir: |
916 if dir: |
924 if dir in self._lazydirs: |
917 self._loadlazy(dir) |
925 self._loadlazy(dir) |
|
926 if dir not in self._dirs: |
918 if dir not in self._dirs: |
927 self._dirs[dir] = treemanifest(self._subpath(dir)) |
919 self._dirs[dir] = treemanifest(self._subpath(dir)) |
928 self._dirs[dir].setflag(subpath, flags) |
920 self._dirs[dir].setflag(subpath, flags) |
929 else: |
921 else: |
930 self._flags[f] = flags |
922 self._flags[f] = flags |
991 |
983 |
992 def hasdir(self, dir): |
984 def hasdir(self, dir): |
993 self._load() |
985 self._load() |
994 topdir, subdir = _splittopdir(dir) |
986 topdir, subdir = _splittopdir(dir) |
995 if topdir: |
987 if topdir: |
996 if topdir in self._lazydirs: |
988 self._loadlazy(topdir) |
997 self._loadlazy(topdir) |
|
998 if topdir in self._dirs: |
989 if topdir in self._dirs: |
999 return self._dirs[topdir].hasdir(subdir) |
990 return self._dirs[topdir].hasdir(subdir) |
1000 return False |
991 return False |
1001 dirslash = dir + '/' |
992 dirslash = dir + '/' |
1002 return dirslash in self._dirs or dirslash in self._lazydirs |
993 return dirslash in self._dirs or dirslash in self._lazydirs |