mercurial/hg.py
changeset 1090 1bca39b85615
parent 1089 142b5d5ec9cc
child 1093 1f1661c58283
equal deleted inserted replaced
1089:142b5d5ec9cc 1090:1bca39b85615
    11 from revlog import *
    11 from revlog import *
    12 from repo import *
    12 from repo import *
    13 from demandload import *
    13 from demandload import *
    14 demandload(globals(), "localrepo httprepo sshrepo")
    14 demandload(globals(), "localrepo httprepo sshrepo")
    15 
    15 
    16 # used to avoid circular references so destructors work
       
    17 def opener(base):
       
    18     p = base
       
    19     def o(path, mode="r"):
       
    20         if p.startswith("http://"):
       
    21             f = os.path.join(p, urllib.quote(path))
       
    22             return httprangereader.httprangereader(f)
       
    23 
       
    24         f = os.path.join(p, path)
       
    25 
       
    26         mode += "b" # for that other OS
       
    27 
       
    28         if mode[0] != "r":
       
    29             try:
       
    30                 s = os.stat(f)
       
    31             except OSError:
       
    32                 d = os.path.dirname(f)
       
    33                 if not os.path.isdir(d):
       
    34                     os.makedirs(d)
       
    35             else:
       
    36                 if s.st_nlink > 1:
       
    37                     file(f + ".tmp", "wb").write(file(f, "rb").read())
       
    38                     util.rename(f+".tmp", f)
       
    39 
       
    40         return file(f, mode)
       
    41 
       
    42     return o
       
    43 
       
    44 def repository(ui, path=None, create=0):
    16 def repository(ui, path=None, create=0):
    45     if path:
    17     if path:
    46         if path.startswith("http://"):
    18         if path.startswith("http://"):
    47             return httprepo.httprepository(ui, path)
    19             return httprepo.httprepository(ui, path)
    48         if path.startswith("https://"):
    20         if path.startswith("https://"):
    50         if path.startswith("hg://"):
    22         if path.startswith("hg://"):
    51             return httprepo.httprepository(
    23             return httprepo.httprepository(
    52                 ui, path.replace("hg://", "http://"))
    24                 ui, path.replace("hg://", "http://"))
    53         if path.startswith("old-http://"):
    25         if path.startswith("old-http://"):
    54             return localrepo.localrepository(
    26             return localrepo.localrepository(
    55                 ui, opener, path.replace("old-http://", "http://"))
    27                 ui, util.opener, path.replace("old-http://", "http://"))
    56         if path.startswith("ssh://"):
    28         if path.startswith("ssh://"):
    57             return sshrepo.sshrepository(ui, path)
    29             return sshrepo.sshrepository(ui, path)
    58 
    30 
    59     return localrepo.localrepository(ui, opener, path, create)
    31     return localrepo.localrepository(ui, util.opener, path, create)