6 # of the GNU General Public License, incorporated herein by reference. |
6 # of the GNU General Public License, incorporated herein by reference. |
7 |
7 |
8 from demandload import demandload |
8 from demandload import demandload |
9 from node import * |
9 from node import * |
10 from i18n import gettext as _ |
10 from i18n import gettext as _ |
11 demandload(globals(), "os re sys signal imp urllib pdb shlex") |
11 demandload(globals(), "bisect os re sys signal imp urllib pdb shlex stat") |
12 demandload(globals(), "fancyopts ui hg util lock revlog bundlerepo") |
12 demandload(globals(), "fancyopts ui hg util lock revlog bundlerepo") |
13 demandload(globals(), "difflib patch time") |
13 demandload(globals(), "difflib patch time") |
14 demandload(globals(), "traceback errno version atexit") |
14 demandload(globals(), "traceback errno version atexit") |
15 demandload(globals(), "archival changegroup cmdutil hgweb.server sshserver") |
15 demandload(globals(), "archival changegroup cmdutil hgweb.server sshserver") |
16 |
16 |
421 fns, match, anypats = cmdutil.matchpats(repo, pats, opts) |
421 fns, match, anypats = cmdutil.matchpats(repo, pats, opts) |
422 if pats: |
422 if pats: |
423 status = repo.status(files=fns, match=match) |
423 status = repo.status(files=fns, match=match) |
424 modified, added, removed, deleted, unknown = status[:5] |
424 modified, added, removed, deleted, unknown = status[:5] |
425 files = modified + added + removed |
425 files = modified + added + removed |
|
426 slist = None |
426 for f in fns: |
427 for f in fns: |
427 if f not in modified + added + removed: |
428 if f not in files: |
|
429 rf = repo.wjoin(f) |
428 if f in unknown: |
430 if f in unknown: |
429 raise util.Abort(_("file %s not tracked!") % f) |
431 raise util.Abort(_("file %s not tracked!") % rf) |
430 else: |
432 try: |
431 raise util.Abort(_("file %s not found!") % f) |
433 mode = os.lstat(rf)[stat.ST_MODE] |
|
434 except OSError: |
|
435 raise util.Abort(_("file %s not found!") % rf) |
|
436 if stat.S_ISDIR(mode): |
|
437 name = f + '/' |
|
438 if slist is None: |
|
439 slist = list(files) |
|
440 slist.sort() |
|
441 i = bisect.bisect(slist, name) |
|
442 if i >= len(slist) or not slist[i].startswith(name): |
|
443 raise util.Abort(_("no match under directory %s!") |
|
444 % rf) |
|
445 elif not stat.S_ISREG(mode): |
|
446 raise util.Abort(_("can't commit %s: " |
|
447 "unsupported file type!") % rf) |
432 else: |
448 else: |
433 files = [] |
449 files = [] |
434 try: |
450 try: |
435 repo.commit(files, message, opts['user'], opts['date'], match, |
451 repo.commit(files, message, opts['user'], opts['date'], match, |
436 force_editor=opts.get('force_editor')) |
452 force_editor=opts.get('force_editor')) |