mercurial/hg.py
changeset 28324 549ff28a345f
parent 28202 a4692267bc2d
parent 28289 d493d64757eb
child 28501 66513f6ca038
equal deleted inserted replaced
28323:ffc693f87148 28324:549ff28a345f
   341             raise error.Abort(_("src repository does not support "
   341             raise error.Abort(_("src repository does not support "
   342                                "revision lookup and so doesn't "
   342                                "revision lookup and so doesn't "
   343                                "support clone by revision"))
   343                                "support clone by revision"))
   344         revs = [srcpeer.lookup(r) for r in rev]
   344         revs = [srcpeer.lookup(r) for r in rev]
   345 
   345 
       
   346     # Obtain a lock before checking for or cloning the pooled repo otherwise
       
   347     # 2 clients may race creating or populating it.
       
   348     pooldir = os.path.dirname(sharepath)
       
   349     # lock class requires the directory to exist.
       
   350     try:
       
   351         util.makedir(pooldir, False)
       
   352     except OSError as e:
       
   353         if e.errno != errno.EEXIST:
       
   354             raise
       
   355 
       
   356     poolvfs = scmutil.vfs(pooldir)
   346     basename = os.path.basename(sharepath)
   357     basename = os.path.basename(sharepath)
   347 
   358 
   348     if os.path.exists(sharepath):
   359     with lock.lock(poolvfs, '%s.lock' % basename):
   349         ui.status(_('(sharing from existing pooled repository %s)\n') %
   360         if os.path.exists(sharepath):
   350                   basename)
   361             ui.status(_('(sharing from existing pooled repository %s)\n') %
   351     else:
   362                       basename)
   352         ui.status(_('(sharing from new pooled repository %s)\n') % basename)
   363         else:
   353         # Always use pull mode because hardlinks in share mode don't work well.
   364             ui.status(_('(sharing from new pooled repository %s)\n') % basename)
   354         # Never update because working copies aren't necessary in share mode.
   365             # Always use pull mode because hardlinks in share mode don't work
   355         clone(ui, peeropts, source, dest=sharepath, pull=True,
   366             # well. Never update because working copies aren't necessary in
   356               rev=rev, update=False, stream=stream)
   367             # share mode.
       
   368             clone(ui, peeropts, source, dest=sharepath, pull=True,
       
   369                   rev=rev, update=False, stream=stream)
   357 
   370 
   358     sharerepo = repository(ui, path=sharepath)
   371     sharerepo = repository(ui, path=sharepath)
   359     share(ui, sharerepo, dest=dest, update=False, bookmarks=False)
   372     share(ui, sharerepo, dest=dest, update=False, bookmarks=False)
   360 
   373 
   361     # We need to perform a pull against the dest repo to fetch bookmarks
   374     # We need to perform a pull against the dest repo to fetch bookmarks