mercurial/localrepo.py
changeset 6840 80e51429cb9a
parent 6839 01db3e101362
child 6876 077f1e637cd8
equal deleted inserted replaced
6839:01db3e101362 6840:80e51429cb9a
    58         # check them
    58         # check them
    59         for r in requirements:
    59         for r in requirements:
    60             if r not in self.supported:
    60             if r not in self.supported:
    61                 raise repo.RepoError(_("requirement '%s' not supported") % r)
    61                 raise repo.RepoError(_("requirement '%s' not supported") % r)
    62 
    62 
    63         # setup store
    63         self.store = store.store(requirements, self.path)
    64         if "store" in requirements:
    64 
    65             self.encodefn = store.encodefilename
    65         self.spath = self.store.path
    66             self.decodefn = store.decodefilename
    66         self.sopener = self.store.opener
    67             self.spath = os.path.join(self.path, "store")
    67         self.sjoin = self.store.join
    68         else:
    68         self._createmode = self.store.createmode
    69             self.encodefn = lambda x: x
    69         self.opener.createmode = self.store.createmode
    70             self.decodefn = lambda x: x
       
    71             self.spath = self.path
       
    72 
       
    73         try:
       
    74             # files in .hg/ will be created using this mode
       
    75             mode = os.stat(self.spath).st_mode
       
    76             # avoid some useless chmods
       
    77             if (0777 & ~util._umask) == (0777 & mode):
       
    78                 mode = None
       
    79         except OSError:
       
    80             mode = None
       
    81 
       
    82         self._createmode = mode
       
    83         self.opener.createmode = mode
       
    84         sopener = util.opener(self.spath)
       
    85         sopener.createmode = mode
       
    86         self.sopener = store.encodedopener(sopener, self.encodefn)
       
    87 
    70 
    88         self.ui = ui.ui(parentui=parentui)
    71         self.ui = ui.ui(parentui=parentui)
    89         try:
    72         try:
    90             self.ui.readconfig(self.join("hgrc"), self.root)
    73             self.ui.readconfig(self.join("hgrc"), self.root)
    91             extensions.loadall(self.ui)
    74             extensions.loadall(self.ui)
   478     def local(self):
   461     def local(self):
   479         return True
   462         return True
   480 
   463 
   481     def join(self, f):
   464     def join(self, f):
   482         return os.path.join(self.path, f)
   465         return os.path.join(self.path, f)
   483 
       
   484     def sjoin(self, f):
       
   485         f = self.encodefn(f)
       
   486         return os.path.join(self.spath, f)
       
   487 
   466 
   488     def wjoin(self, f):
   467     def wjoin(self, f):
   489         return os.path.join(self.root, f)
   468         return os.path.join(self.root, f)
   490 
   469 
   491     def rjoin(self, f):
   470     def rjoin(self, f):
  2059 
  2038 
  2060         if stream and not heads and remote.capable('stream'):
  2039         if stream and not heads and remote.capable('stream'):
  2061             return self.stream_in(remote)
  2040             return self.stream_in(remote)
  2062         return self.pull(remote, heads)
  2041         return self.pull(remote, heads)
  2063 
  2042 
       
  2043     def storefiles(self):
       
  2044         '''get all *.i and *.d files in the store
       
  2045 
       
  2046         Returns (list of (filename, size), total_bytes)'''
       
  2047 
       
  2048         lock = None
       
  2049         try:
       
  2050             self.ui.debug('scanning\n')
       
  2051             entries = []
       
  2052             total_bytes = 0
       
  2053             # get consistent snapshot of repo, lock during scan
       
  2054             lock = self.lock()
       
  2055             for name, size in self.store.walk():
       
  2056                 entries.append((name, size))
       
  2057                 total_bytes += size
       
  2058             return entries, total_bytes
       
  2059         finally:
       
  2060             del lock
       
  2061 
  2064 # used to avoid circular references so destructors work
  2062 # used to avoid circular references so destructors work
  2065 def aftertrans(files):
  2063 def aftertrans(files):
  2066     renamefiles = [tuple(t) for t in files]
  2064     renamefiles = [tuple(t) for t in files]
  2067     def a():
  2065     def a():
  2068         for src, dest in renamefiles:
  2066         for src, dest in renamefiles: