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 |