mercurial/hg.py
changeset 37262 54435fd09f1d
parent 37261 3809eafedf2c
child 37313 70c52800940b
equal deleted inserted replaced
37261:3809eafedf2c 37262:54435fd09f1d
   446             ui.status(_('(sharing from new pooled repository %s)\n') % basename)
   446             ui.status(_('(sharing from new pooled repository %s)\n') % basename)
   447             # Always use pull mode because hardlinks in share mode don't work
   447             # Always use pull mode because hardlinks in share mode don't work
   448             # well. Never update because working copies aren't necessary in
   448             # well. Never update because working copies aren't necessary in
   449             # share mode.
   449             # share mode.
   450             clone(ui, peeropts, source, dest=sharepath, pull=True,
   450             clone(ui, peeropts, source, dest=sharepath, pull=True,
   451                   rev=rev, update=False, stream=stream)
   451                   revs=rev, update=False, stream=stream)
   452 
   452 
   453     # Resolve the value to put in [paths] section for the source.
   453     # Resolve the value to put in [paths] section for the source.
   454     if islocal(source):
   454     if islocal(source):
   455         defaultpath = os.path.abspath(util.urllocalpath(source))
   455         defaultpath = os.path.abspath(util.urllocalpath(source))
   456     else:
   456     else:
   481     if os.path.exists(srcbranchcache):
   481     if os.path.exists(srcbranchcache):
   482         if not os.path.exists(dstcachedir):
   482         if not os.path.exists(dstcachedir):
   483             os.mkdir(dstcachedir)
   483             os.mkdir(dstcachedir)
   484         util.copyfile(srcbranchcache, dstbranchcache)
   484         util.copyfile(srcbranchcache, dstbranchcache)
   485 
   485 
   486 def clone(ui, peeropts, source, dest=None, pull=False, rev=None,
   486 def clone(ui, peeropts, source, dest=None, pull=False, revs=None,
   487           update=True, stream=False, branch=None, shareopts=None):
   487           update=True, stream=False, branch=None, shareopts=None):
   488     """Make a copy of an existing repository.
   488     """Make a copy of an existing repository.
   489 
   489 
   490     Create a copy of an existing repository in a new directory.  The
   490     Create a copy of an existing repository in a new directory.  The
   491     source and destination are URLs, as passed to the repository
   491     source and destination are URLs, as passed to the repository
   510     server prefers streaming
   510     server prefers streaming
   511 
   511 
   512     stream: stream raw data uncompressed from repository (fast over
   512     stream: stream raw data uncompressed from repository (fast over
   513     LAN, slow over WAN)
   513     LAN, slow over WAN)
   514 
   514 
   515     rev: revision to clone up to (implies pull=True)
   515     revs: revision to clone up to (implies pull=True)
   516 
   516 
   517     update: update working directory after clone completes, if
   517     update: update working directory after clone completes, if
   518     destination is local repository (True means update to default rev,
   518     destination is local repository (True means update to default rev,
   519     anything else is treated as a revision)
   519     anything else is treated as a revision)
   520 
   520 
   534         srcpeer = peer(ui, peeropts, source)
   534         srcpeer = peer(ui, peeropts, source)
   535     else:
   535     else:
   536         srcpeer = source.peer() # in case we were called with a localrepo
   536         srcpeer = source.peer() # in case we were called with a localrepo
   537         branches = (None, branch or [])
   537         branches = (None, branch or [])
   538         origsource = source = srcpeer.url()
   538         origsource = source = srcpeer.url()
   539     rev, checkout = addbranchrevs(srcpeer, srcpeer, branches, rev)
   539     revs, checkout = addbranchrevs(srcpeer, srcpeer, branches, revs)
   540 
   540 
   541     if dest is None:
   541     if dest is None:
   542         dest = defaultdest(source)
   542         dest = defaultdest(source)
   543         if dest:
   543         if dest:
   544             ui.status(_("destination directory: %s\n") % dest)
   544             ui.status(_("destination directory: %s\n") % dest)
   585             raise error.Abort(_('unknown share naming mode: %s') %
   585             raise error.Abort(_('unknown share naming mode: %s') %
   586                               sharenamemode)
   586                               sharenamemode)
   587 
   587 
   588         if sharepath:
   588         if sharepath:
   589             return clonewithshare(ui, peeropts, sharepath, source, srcpeer,
   589             return clonewithshare(ui, peeropts, sharepath, source, srcpeer,
   590                                   dest, pull=pull, rev=rev, update=update,
   590                                   dest, pull=pull, rev=revs, update=update,
   591                                   stream=stream)
   591                                   stream=stream)
   592 
   592 
   593     srclock = destlock = cleandir = None
   593     srclock = destlock = cleandir = None
   594     srcrepo = srcpeer.local()
   594     srcrepo = srcpeer.local()
   595     try:
   595     try:
   601             cleandir = dest
   601             cleandir = dest
   602 
   602 
   603         copy = False
   603         copy = False
   604         if (srcrepo and srcrepo.cancopy() and islocal(dest)
   604         if (srcrepo and srcrepo.cancopy() and islocal(dest)
   605             and not phases.hassecret(srcrepo)):
   605             and not phases.hassecret(srcrepo)):
   606             copy = not pull and not rev
   606             copy = not pull and not revs
   607 
   607 
   608         if copy:
   608         if copy:
   609             try:
   609             try:
   610                 # we use a lock here because if we race with commit, we
   610                 # we use a lock here because if we race with commit, we
   611                 # can end up with extra data in the cloned revlogs that's
   611                 # can end up with extra data in the cloned revlogs that's
   658                     cleandir = None
   658                     cleandir = None
   659                     raise error.Abort(_("destination '%s' already exists")
   659                     raise error.Abort(_("destination '%s' already exists")
   660                                      % dest)
   660                                      % dest)
   661                 raise
   661                 raise
   662 
   662 
   663             revs = None
   663             if revs:
   664             if rev:
       
   665                 if not srcpeer.capable('lookup'):
   664                 if not srcpeer.capable('lookup'):
   666                     raise error.Abort(_("src repository does not support "
   665                     raise error.Abort(_("src repository does not support "
   667                                        "revision lookup and so doesn't "
   666                                        "revision lookup and so doesn't "
   668                                        "support clone by revision"))
   667                                        "support clone by revision"))
   669                 revs = [srcpeer.lookup(r) for r in rev]
   668                 revs = [srcpeer.lookup(r) for r in revs]
   670                 checkout = revs[0]
   669                 checkout = revs[0]
       
   670             else:
       
   671                 revs = None
   671             local = destpeer.local()
   672             local = destpeer.local()
   672             if local:
   673             if local:
   673                 u = util.url(abspath)
   674                 u = util.url(abspath)
   674                 defaulturl = bytes(u)
   675                 defaulturl = bytes(u)
   675                 local.ui.setconfig('paths', 'default', defaulturl, 'clone')
   676                 local.ui.setconfig('paths', 'default', defaulturl, 'clone')