@@ -314,8 +314,12 @@ def _abssource(repo, push=False, abort=T
if abort:
raise util.Abort(_("default path for subrepository not found"))
-def _sanitize(ui, path):
+def _sanitize(ui, path, ignore):
for dirname, dirs, names in os.walk(path):
+ for i, d in enumerate(dirs):
+ if d.lower() == ignore:
+ del dirs[i]
+ break
if os.path.basename(dirname).lower() != '.hg':
continue
for f in names:
@@ -1050,7 +1054,7 @@ class svnsubrepo(abstractsubrepo):
# update to a directory which has since been deleted and recreated.
args.append('%s@%s' % (state[0], state[1]))
status, err = self._svncommand(args, failok=True)
- _sanitize(self._ui, self._ctx._repo.wjoin(self._path))
+ _sanitize(self._ui, self._ctx._repo.wjoin(self._path), '.svn')
if not re.search('Checked out revision [0-9]+.', status):
if ('is already a working copy for a different URL' in err
and (self._wcchanged()[:2] == (False, False))):
@@ -1343,7 +1347,7 @@ class gitsubrepo(abstractsubrepo):
self._gitcommand(['reset', 'HEAD'])
cmd.append('-f')
self._gitcommand(cmd + args)
- _sanitize(self._ui, self._abspath)
+ _sanitize(self._ui, self._abspath, '.git')
def rawcheckout():
# no branch to checkout, check it out with no branch
@@ -1392,7 +1396,7 @@ class gitsubrepo(abstractsubrepo):
if tracking[remote] != self._gitcurrentbranch():
checkout([tracking[remote]])
self._gitcommand(['merge', '--ff', remote])
- _sanitize(self._ui, self._abspath)
+ _sanitize(self._ui, self._abspath, '.git')
else:
# a real merge would be required, just checkout the revision
rawcheckout()
@@ -1428,7 +1432,7 @@ class gitsubrepo(abstractsubrepo):
self.get(state) # fast forward merge
elif base != self._state[1]:
self._gitcommand(['merge', '--no-commit', revision])
- _sanitize(self._ui, self._abspath)
+ _sanitize(self._ui, self._abspath, '.git')
if self.dirty():
if self._gitstate() != revision:
@@ -658,4 +658,13 @@ additional test for "git merge --ff" rou
$ cat s/sub/.hg/hgrc
cat: s/sub/.hg/hgrc: No such file or directory
[1]
- $ cd ..
+
+Test that sanitizing is omitted in meta data area:
+
+ $ mkdir s/.git/.hg
+ $ echo '.hg/hgrc in git metadata area' > s/.git/.hg/hgrc
+ $ hg update -q -C af6d2edbb0d3
+ checking out detached HEAD in subrepo s
+ check out a git branch if you intend to make changes
+
+ $ cd ..
@@ -676,4 +676,10 @@ Test sanitizing ".hg/hgrc" in subrepo
cat: s/sub/.hg/hgrc: No such file or directory
[1]
+Test that sanitizing is omitted in meta data area:
+
+ $ mkdir s/.svn/.hg
+ $ echo '.hg/hgrc in svn metadata area' > s/.svn/.hg/hgrc
+ $ hg update -q -C '.^1'
+
$ cd ../..