Mercurial > hg-stable
changeset 1244:937ee88da3ef
clone: fall back to pull if we can't lock the source repo
author | mpm@selenic.com |
---|---|
date | Wed, 14 Sep 2005 15:48:34 -0500 |
parents | 9d10f89b75a5 |
children | d0a960b437a8 |
files | mercurial/commands.py tests/test-pull-permission tests/test-pull-permission.out |
diffstat | 3 files changed, 43 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Wed Sep 14 13:14:20 2005 -0500 +++ b/mercurial/commands.py Wed Sep 14 15:48:34 2005 -0500 @@ -621,15 +621,23 @@ abspath = source other = hg.repository(ui, source) + copy = False if other.dev() != -1: abspath = os.path.abspath(source) + copy = True - # we use a lock here because if we race with commit, we can - # end up with extra data in the cloned revlogs that's not - # pointed to by changesets, thus causing verify to fail - l1 = lock.lock(os.path.join(source, ".hg", "lock")) + if copy: + try: + # we use a lock here because if we race with commit, we + # can end up with extra data in the cloned revlogs that's + # not pointed to by changesets, thus causing verify to + # fail + l1 = lock.lock(os.path.join(source, ".hg", "lock")) + except OSError: + copy = False - # and here to avoid premature writing to the target + if copy: + # we lock here to avoid premature writing to the target os.mkdir(os.path.join(dest, ".hg")) l2 = lock.lock(os.path.join(dest, ".hg", "lock"))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-pull-permission Wed Sep 14 15:48:34 2005 -0500 @@ -0,0 +1,20 @@ +#!/bin/sh + +mkdir a +cd a +hg init +echo foo > b +hg add b +hg ci -m "b" -d "0 0" + +chmod -w .hg + +cd .. + +hg clone a b +cd b +hg verify + +cd .. + +chmod +w a/.hg # let test clean up
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-pull-permission.out Wed Sep 14 15:48:34 2005 -0500 @@ -0,0 +1,10 @@ +requesting all changes +adding changesets +adding manifests +adding file changes +added 1 changesets with 1 changes to 1 files +checking changesets +checking manifests +crosschecking files in changesets and manifests +checking files +1 files, 1 changesets, 1 total revisions