mercurial/commands.py
changeset 634 da5378d39269
parent 632 8b8f710bb658
child 635 85e2209d401c
equal deleted inserted replaced
633:f597539c7abd 634:da5378d39269
   360         fp = sys.stdout
   360         fp = sys.stdout
   361     fp.write(r.read(n))
   361     fp.write(r.read(n))
   362 
   362 
   363 def clone(ui, source, dest = None, **opts):
   363 def clone(ui, source, dest = None, **opts):
   364     """make a copy of an existing repository"""
   364     """make a copy of an existing repository"""
   365     source = ui.expandpath(source)
       
   366 
       
   367     if dest is None:
   365     if dest is None:
   368         dest = os.path.basename(os.path.normpath(source))
   366         dest = os.path.basename(os.path.normpath(source))
   369 
   367 
   370     if os.path.exists(dest):
   368     if os.path.exists(dest):
   371         ui.warn("abort: destination '%s' already exists\n" % dest)
   369         ui.warn("abort: destination '%s' already exists\n" % dest)
   382         def __del__(self):
   380         def __del__(self):
   383             if self.dir:
   381             if self.dir:
   384                 self.rmtree(self.dir, True)
   382                 self.rmtree(self.dir, True)
   385 
   383 
   386     d = dircleanup(dest)
   384     d = dircleanup(dest)
   387 
       
   388     link = 0
   385     link = 0
   389     abspath = source
   386     abspath = source
   390     if not (source.startswith("http://") or
   387     source = ui.expandpath(source)
   391             source.startswith("hg://") or
   388     other = hg.repository(ui, source)
   392             source.startswith("ssh://") or
   389 
   393             source.startswith("old-http://")):
   390     if other.dev() != -1 and os.stat(dest).st_dev == other.dev():
   394         abspath = os.path.abspath(source)
   391         ui.status("cloning by hardlink\n")
   395         d1 = os.stat(dest).st_dev
       
   396         d2 = os.stat(source).st_dev
       
   397         if d1 == d2: link = 1
       
   398 
       
   399     if link:
       
   400         ui.note("copying by hardlink\n")
       
   401         util.system("cp -al '%s'/.hg '%s'/.hg" % (source, dest))
   392         util.system("cp -al '%s'/.hg '%s'/.hg" % (source, dest))
   402         try:
   393         try:
   403             os.remove(os.path.join(dest, ".hg", "dirstate"))
   394             os.remove(os.path.join(dest, ".hg", "dirstate"))
   404         except: pass
   395         except: pass
   405 
   396 
   406         repo = hg.repository(ui, dest)
   397         repo = hg.repository(ui, dest)
   407 
   398 
   408     else:
   399     else:
   409         repo = hg.repository(ui, dest, create=1)
   400         repo = hg.repository(ui, dest, create=1)
   410         other = hg.repository(ui, source)
       
   411         repo.pull(other)
   401         repo.pull(other)
   412 
   402 
   413     f = repo.opener("hgrc", "w")
   403     f = repo.opener("hgrc", "w")
   414     f.write("[paths]\n")
   404     f.write("[paths]\n")
   415     f.write("default = %s\n" % abspath)
   405     f.write("default = %s\n" % abspath)