mercurial/localrepo.py
changeset 3854 4f6db0233606
parent 3835 d1ce5461beed
parent 3853 c0b449154a90
child 3861 db36a4f490f6
equal deleted inserted replaced
3848:8cbf060f637e 3854:4f6db0233606
    14 demandload(globals(), "re lock transaction tempfile stat mdiff errno ui")
    14 demandload(globals(), "re lock transaction tempfile stat mdiff errno ui")
    15 demandload(globals(), "os revlog time util")
    15 demandload(globals(), "os revlog time util")
    16 
    16 
    17 class localrepository(repo.repository):
    17 class localrepository(repo.repository):
    18     capabilities = ('lookup', 'changegroupsubset')
    18     capabilities = ('lookup', 'changegroupsubset')
       
    19     supported = ('revlogv1', 'store')
    19 
    20 
    20     def __del__(self):
    21     def __del__(self):
    21         self.transhandle = None
    22         self.transhandle = None
    22     def __init__(self, parentui, path=None, create=0):
    23     def __init__(self, parentui, path=None, create=0):
    23         repo.repository.__init__(self)
    24         repo.repository.__init__(self)
    28                 p = os.path.dirname(p)
    29                 p = os.path.dirname(p)
    29                 if p == oldp:
    30                 if p == oldp:
    30                     raise repo.RepoError(_("There is no Mercurial repository"
    31                     raise repo.RepoError(_("There is no Mercurial repository"
    31                                            " here (.hg not found)"))
    32                                            " here (.hg not found)"))
    32             path = p
    33             path = p
       
    34 
    33         self.path = os.path.join(path, ".hg")
    35         self.path = os.path.join(path, ".hg")
    34         self.spath = self.path
    36         self.root = os.path.realpath(path)
       
    37         self.origroot = path
       
    38         self.opener = util.opener(self.path)
       
    39         self.wopener = util.opener(self.root)
    35 
    40 
    36         if not os.path.isdir(self.path):
    41         if not os.path.isdir(self.path):
    37             if create:
    42             if create:
    38                 if not os.path.exists(path):
    43                 if not os.path.exists(path):
    39                     os.mkdir(path)
    44                     os.mkdir(path)
    40                 os.mkdir(self.path)
    45                 os.mkdir(self.path)
    41                 if self.spath != self.path:
    46                 os.mkdir(os.path.join(self.path, "store"))
    42                     os.mkdir(self.spath)
    47                 requirements = ("revlogv1", "store")
       
    48                 reqfile = self.opener("requires", "w")
       
    49                 for r in requirements:
       
    50                     reqfile.write("%s\n" % r)
       
    51                 reqfile.close()
       
    52                 # create an invalid changelog
       
    53                 self.opener("00changelog.i", "a").write('\0\0\0\2')
    43             else:
    54             else:
    44                 raise repo.RepoError(_("repository %s not found") % path)
    55                 raise repo.RepoError(_("repository %s not found") % path)
    45         elif create:
    56         elif create:
    46             raise repo.RepoError(_("repository %s already exists") % path)
    57             raise repo.RepoError(_("repository %s already exists") % path)
    47 
    58         else:
    48         self.root = os.path.realpath(path)
    59             # find requirements
    49         self.origroot = path
    60             try:
       
    61                 requirements = self.opener("requires").read().splitlines()
       
    62             except IOError, inst:
       
    63                 if inst.errno != errno.ENOENT:
       
    64                     raise
       
    65                 requirements = []
       
    66         # check them
       
    67         for r in requirements:
       
    68             if r not in self.supported:
       
    69                 raise repo.RepoError(_("requirement '%s' not supported") % r)
       
    70 
       
    71         # setup store
       
    72         if "store" in requirements:
       
    73             self.encodefn = util.encodefilename
       
    74             self.decodefn = util.decodefilename
       
    75             self.spath = os.path.join(self.path, "store")
       
    76         else:
       
    77             self.encodefn = lambda x: x
       
    78             self.decodefn = lambda x: x
       
    79             self.spath = self.path
       
    80         self.sopener = util.encodedopener(util.opener(self.spath), self.encodefn)
       
    81 
    50         self.ui = ui.ui(parentui=parentui)
    82         self.ui = ui.ui(parentui=parentui)
    51         self.opener = util.opener(self.path)
       
    52         self.sopener = util.opener(self.spath)
       
    53         self.wopener = util.opener(self.root)
       
    54 
       
    55         try:
    83         try:
    56             self.ui.readconfig(self.join("hgrc"), self.root)
    84             self.ui.readconfig(self.join("hgrc"), self.root)
    57         except IOError:
    85         except IOError:
    58             pass
    86             pass
    59 
    87 
   406 
   434 
   407     def join(self, f):
   435     def join(self, f):
   408         return os.path.join(self.path, f)
   436         return os.path.join(self.path, f)
   409 
   437 
   410     def sjoin(self, f):
   438     def sjoin(self, f):
       
   439         f = self.encodefn(f)
   411         return os.path.join(self.spath, f)
   440         return os.path.join(self.spath, f)
   412 
   441 
   413     def wjoin(self, f):
   442     def wjoin(self, f):
   414         return os.path.join(self.root, f)
   443         return os.path.join(self.root, f)
   415 
   444