# HG changeset patch # User Bryan O'Sullivan # Date 1126733986 25200 # Node ID 0ad3f9b27260228d237be2f40c986735133ea6ec # Parent a5355fa5e33aa4df79584f2744318ce4877d6544# Parent d0a960b437a8cc92cd6668dfe32908bbefcf20fd Merge with MPM. diff -r a5355fa5e33a -r 0ad3f9b27260 contrib/hgit --- a/contrib/hgit Wed Sep 14 14:29:02 2005 -0700 +++ b/contrib/hgit Wed Sep 14 14:39:46 2005 -0700 @@ -256,13 +256,13 @@ while visit: n = visit.pop(0) if n in stop_sha1: - break + continue for p in repo.changelog.parents(n): if p not in reachable[i]: reachable[i][p] = 1 visit.append(p) if p in stop_sha1: - break + continue # walk the repository looking for commits that are in our # reachability graph diff -r a5355fa5e33a -r 0ad3f9b27260 mercurial/commands.py --- a/mercurial/commands.py Wed Sep 14 14:29:02 2005 -0700 +++ b/mercurial/commands.py Wed Sep 14 14:39:46 2005 -0700 @@ -579,8 +579,11 @@ change = repo.changelog.read(n) m = repo.manifest.read(change[0]) n = m[relpath(repo, [file1])[0]] - except hg.RepoError, KeyError: - n = r.lookup(rev) + except (hg.RepoError, KeyError): + try: + n = r.lookup(rev) + except KeyError, inst: + raise util.Abort('cannot find file %s in rev %s', file1, rev) else: n = r.tip() fp = make_file(repo, r, opts['output'], node=n) @@ -618,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")) diff -r a5355fa5e33a -r 0ad3f9b27260 mercurial/dirstate.py --- a/mercurial/dirstate.py Wed Sep 14 14:29:02 2005 -0700 +++ b/mercurial/dirstate.py Wed Sep 14 14:39:46 2005 -0700 @@ -260,7 +260,7 @@ work.append(p) else: if statmatch(np, st): - yield np + yield util.pconvert(np) known = {'.hg': 1} def seen(fn): diff -r a5355fa5e33a -r 0ad3f9b27260 tests/test-pull-permission --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-pull-permission Wed Sep 14 14:39:46 2005 -0700 @@ -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 diff -r a5355fa5e33a -r 0ad3f9b27260 tests/test-pull-permission.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-pull-permission.out Wed Sep 14 14:39:46 2005 -0700 @@ -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