diff --git a/hggit/git_handler.py b/hggit/git_handler.py index 6aa31a3b0506247e054b99c3a92ff6e15bb3bad8_aGdnaXQvZ2l0X2hhbmRsZXIucHk=..3246f2fab6255fd875f4b86fd19bf4214a1c44ac_aGdnaXQvZ2l0X2hhbmRsZXIucHk= 100644 --- a/hggit/git_handler.py +++ b/hggit/git_handler.py @@ -770,8 +770,11 @@ else: hgsubstate[path] = sha # in case .hgsubstate wasn't among changed files - # force its inclusion - if not hgsubstate and parentsubdata: + # force its inclusion if it wasn't already deleted + hgsubdeleted = files.get('.hgsubstate') + if hgsubdeleted: + hgsubdeleted = hgsubdeleted[0] + if hgsubdeleted or (not hgsubstate and parentsubdata): files['.hgsubstate'] = True, None, None elif util.serialize_hgsubstate(hgsubstate) != parentsubdata: files['.hgsubstate'] = False, 0100644, None diff --git a/tests/test-clone.t b/tests/test-clone.t index 6aa31a3b0506247e054b99c3a92ff6e15bb3bad8_dGVzdHMvdGVzdC1jbG9uZS50..3246f2fab6255fd875f4b86fd19bf4214a1c44ac_dGVzdHMvdGVzdC1jbG9uZS50 100644 --- a/tests/test-clone.t +++ b/tests/test-clone.t @@ -60,6 +60,22 @@ saving mapfile saving mapfile +Make sure that a deleted .hgsubstate does not confuse hg-git + + $ cd gitrepo + $ echo 'HASH random' > .hgsubstate + $ git add .hgsubstate + $ fn_git_commit -m 'add bogus .hgsubstate' + $ git rm -q .hgsubstate + $ fn_git_commit -m 'remove bogus .hgsubstate' + $ cd .. + + $ hg clone -r beta gitrepo hgrepo-c + importing git objects into hg + updating to branch default + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg --cwd hgrepo-c status + clone empty repo $ git init empty Initialized empty Git repository in $TESTTMP/empty/.git/