Mercurial > hg
view tests/test-commit-interactive-curses.t @ 26000:9ac4e81b9659 stable
match: fix a caseonly rename + explicit path commit on icasefs (issue4768)
The problem was that the former name and the new name are both normalized to the
case in dirstate, so matcher._files would be ['ABC.txt', 'ABC.txt'].
localrepo.commit() calls localrepo.status(), passing along the matcher. Inside
dirstate.status(), _walkexplicit() simply grabs matcher.files() and processes
those items. Since the old name isn't present, it is silently dropped. There's
a fundamental tension here, because the status command should also accept files
that don't match the filesystem, so we can't drop the normalization in status.
The problem originated in baa11dde8c0e.
Unfortunately with this change, the case of the old file must still be specified
exactly, or the old file is again silently excluded. I went back to
baa11dde8c0e^, and that had the same behavior, so we are no worse off. I'm open
to ideas from a matcher or dirstate expert on how to fix that half.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 06 Aug 2015 21:00:16 -0400 |
parents | 52c552a05414 |
children | 1aee2ab0f902 |
line wrap: on
line source
Set up a repo $ cat <<EOF >> $HGRCPATH > [ui] > interactive = true > [experimental] > crecord = true > crecordtest = testModeCommands > EOF $ hg init a $ cd a Committing some changes but stopping on the way $ echo "a" > a $ hg add a $ cat <<EOF >testModeCommands > TOGGLE > X > EOF $ hg commit -i -m "a" -d "0 0" no changes to record $ hg tip changeset: -1:000000000000 tag: tip user: date: Thu Jan 01 00:00:00 1970 +0000 Committing some changes $ cat <<EOF >testModeCommands > X > EOF $ hg commit -i -m "a" -d "0 0" $ hg tip changeset: 0:cb9a9f314b8b tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: a Committing only one file $ echo "a" >> a >>> open('b', 'wb').write("1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n") $ hg add b $ cat <<EOF >testModeCommands > TOGGLE > KEY_DOWN > X > EOF $ hg commit -i -m "one file" -d "0 0" $ hg tip changeset: 1:fb2705a663ea tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: one file $ hg cat -r tip a a $ cat a a a Committing only one hunk while aborting edition of hunk - Untoggle all the hunks, go down to the second file - unfold it - go down to second hunk (1 for the first hunk, 1 for the first hunkline, 1 for the second hunk, 1 for the second hunklike) - toggle the second hunk - edit the hunk and quit the editor imediately with non-zero status - commit $ printf "printf 'editor ran\n'; exit 1" > editor.sh $ echo "x" > c $ cat b >> c $ echo "y" >> c $ mv c b $ cat <<EOF >testModeCommands > A > KEY_DOWN > f > KEY_DOWN > KEY_DOWN > KEY_DOWN > KEY_DOWN > TOGGLE > e > X > EOF $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit -i -m "one hunk" -d "0 0" editor ran $ rm editor.sh $ hg tip changeset: 2:7d10dfe755a8 tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: one hunk $ hg cat -r tip b 1 2 3 4 5 6 7 8 9 10 y $ cat b x 1 2 3 4 5 6 7 8 9 10 y $ hg commit -m "other hunks" $ hg tip changeset: 3:a6735021574d tag: tip user: test date: Thu Jan 01 00:00:00 1970 +0000 summary: other hunks $ hg cat -r tip b x 1 2 3 4 5 6 7 8 9 10 y Newly added files can be selected with the curses interface $ hg update -C . 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo "hello" > x $ hg add x $ cat <<EOF >testModeCommands > TOGGLE > TOGGLE > X > EOF $ hg st A x ? testModeCommands $ hg commit -i -m "newly added file" -d "0 0" $ hg st ? testModeCommands