Mercurial > hg-stable
changeset 3786:8d603f8567ae
make hg commit <dirname> work again
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Tue, 21 Nov 2006 20:00:15 -0200 |
parents | 6398ff7cb705 |
children | 18c93649f563 |
files | mercurial/commands.py tests/test-commit tests/test-commit.out |
diffstat | 3 files changed, 68 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/commands.py Mon Dec 04 17:10:31 2006 -0600 +++ b/mercurial/commands.py Tue Nov 21 20:00:15 2006 -0200 @@ -8,7 +8,7 @@ from demandload import demandload from node import * from i18n import gettext as _ -demandload(globals(), "os re sys signal imp urllib pdb shlex") +demandload(globals(), "bisect os re sys signal imp urllib pdb shlex stat") demandload(globals(), "fancyopts ui hg util lock revlog bundlerepo") demandload(globals(), "difflib patch time") demandload(globals(), "traceback errno version atexit") @@ -423,12 +423,28 @@ status = repo.status(files=fns, match=match) modified, added, removed, deleted, unknown = status[:5] files = modified + added + removed + slist = None for f in fns: - if f not in modified + added + removed: + if f not in files: + rf = repo.wjoin(f) if f in unknown: - raise util.Abort(_("file %s not tracked!") % f) - else: - raise util.Abort(_("file %s not found!") % f) + raise util.Abort(_("file %s not tracked!") % rf) + try: + mode = os.lstat(rf)[stat.ST_MODE] + except OSError: + raise util.Abort(_("file %s not found!") % rf) + if stat.S_ISDIR(mode): + name = f + '/' + if slist is None: + slist = list(files) + slist.sort() + i = bisect.bisect(slist, name) + if i >= len(slist) or not slist[i].startswith(name): + raise util.Abort(_("no match under directory %s!") + % rf) + elif not stat.S_ISREG(mode): + raise util.Abort(_("can't commit %s: " + "unsupported file type!") % rf) else: files = [] try:
--- a/tests/test-commit Mon Dec 04 17:10:31 2006 -0600 +++ b/tests/test-commit Tue Nov 21 20:00:15 2006 -0200 @@ -1,5 +1,10 @@ #!/bin/sh +cleanpath() +{ + sed -e "s:/.*\(/test/.*\):...\1:" +} + echo % commit date test hg init test cd test @@ -17,7 +22,35 @@ echo bar > bar hg add bar rm bar -hg commit -d "1000000 0" -m commit-8 2>&1 | sed -e "s:/.*\(/test/.*\):...\1:" +hg commit -d "1000000 0" -m commit-8 2>&1 | cleanpath + +hg -q revert -a --no-backup + +mkdir dir +echo boo > dir/file +hg add +hg -v commit -d '0 0' -m commit-9 dir + +echo > dir.file +hg add +hg commit -d '0 0' -m commit-10 dir dir.file 2>&1 | cleanpath + +echo >> dir/file +mkdir bleh +mkdir dir2 +cd bleh +hg commit -d '0 0' -m commit-11 . 2>&1 | cleanpath +hg commit -d '0 0' -m commit-12 ../dir ../dir2 2>&1 | cleanpath +hg -v commit -d '0 0' -m commit-13 ../dir +cd .. + +hg commit -d '0 0' -m commit-14 does-not-exist 2>&1 | cleanpath +ln -s foo baz +hg commit -d '0 0' -m commit-15 baz 2>&1 | cleanpath +touch quux +hg commit -d '0 0' -m commit-16 quux 2>&1 | cleanpath +echo >> dir/file +hg -v commit -d '0 0' -m commit-17 dir/file cd .. echo % partial subdir commit test
--- a/tests/test-commit.out Mon Dec 04 17:10:31 2006 -0600 +++ b/tests/test-commit.out Tue Nov 21 20:00:15 2006 -0200 @@ -17,6 +17,19 @@ % partial commit test trouble committing bar! abort: No such file or directory: .../test/bar +adding dir/file +dir/file +adding dir.file +abort: no match under directory .../test/dir! +abort: no match under directory .../test/bleh! +abort: no match under directory .../test/dir2! +dir/file +does-not-exist: No such file or directory +abort: file .../test/does-not-exist not found! +baz: unsupported file type (type is symbolic link) +abort: can't commit .../test/baz: unsupported file type! +abort: file .../test/quux not tracked! +dir/file % partial subdir commit test adding bar/bar adding foo/foo