diff --git a/hgext/record.py b/hgext/record.py --- a/hgext/record.py +++ b/hgext/record.py @@ -261,7 +261,7 @@ def parsepatch(fp): def filterpatch(ui, headers): """Interactively filter patch chunks into applied-only chunks""" - def prompt(skipfile, skipall, query): + def prompt(skipfile, skipall, query, chunk): """prompt query, and process base inputs - y/n for the rest of file @@ -271,14 +271,16 @@ def filterpatch(ui, headers): Return True/False and possibly updated skipfile and skipall. """ + newpatches = None if skipall is not None: - return skipall, skipfile, skipall + return skipall, skipfile, skipall, newpatches if skipfile is not None: - return skipfile, skipfile, skipall + return skipfile, skipfile, skipall, newpatches while True: - resps = _('[Ynsfdaq?]') + resps = _('[Ynesfdaq?]') choices = (_('&Yes, record this change'), _('&No, skip this change'), + _('&Edit the change manually'), _('&Skip remaining changes to this file'), _('Record remaining changes to this &file'), _('&Done, skip remaining changes and files'), @@ -287,7 +289,7 @@ def filterpatch(ui, headers): _('&?')) r = ui.promptchoice("%s %s" % (query, resps), choices) ui.write("\n") - if r == 7: # ? + if r == 8: # ? doc = gettext(record.__doc__) c = doc.find('::') + 2 for l in doc[c:].splitlines(): @@ -298,17 +300,69 @@ def filterpatch(ui, headers): ret = True elif r == 1: # no ret = False - elif r == 2: # Skip + elif r == 2: # Edit patch + if chunk is None: + ui.write(_('cannot edit patch for whole file')) + ui.write("\n") + continue + if chunk.header.binary(): + ui.write(_('cannot edit patch for binary file')) + ui.write("\n") + continue + # Patch comment based on the Git one (based on comment at end of + # http://mercurial.selenic.com/wiki/RecordExtension) + phelp = '---' + _(""" +To remove '-' lines, make them ' ' lines (context). +To remove '+' lines, delete them. +Lines starting with # will be removed from the patch. + +If the patch applies cleanly, the edited hunk will immediately be +added to the record list. If it does not apply cleanly, a rejects +file will be generated: you can use that when you try again. If +all lines of the hunk are removed, then the edit is aborted and +the hunk is left unchanged. +""") + (patchfd, patchfn) = tempfile.mkstemp(prefix="hg-editor-", + suffix=".diff", text=True) + try: + # Write the initial patch + f = os.fdopen(patchfd, "w") + chunk.header.write(f) + chunk.write(f) + f.write('\n'.join(['# ' + i for i in phelp.splitlines()])) + f.close() + # Start the editor and wait for it to complete + editor = ui.geteditor() + util.system("%s \"%s\"" % (editor, patchfn), + environ={'HGUSER': ui.username()}, + onerr=util.Abort, errprefix=_("edit failed"), + out=ui.fout) + # Remove comment lines + patchfp = open(patchfn) + ncpatchfp = cStringIO.StringIO() + for line in patchfp: + if not line.startswith('#'): + ncpatchfp.write(line) + patchfp.close() + ncpatchfp.seek(0) + newpatches = parsepatch(ncpatchfp) + finally: + os.unlink(patchfn) + del ncpatchfp + # Signal that the chunk shouldn't be applied as-is, but + # provide the new patch to be used instead. + ret = False + elif r == 3: # Skip ret = skipfile = False - elif r == 3: # file (Record remaining) + elif r == 4: # file (Record remaining) ret = skipfile = True - elif r == 4: # done, skip remaining + elif r == 5: # done, skip remaining ret = skipall = False - elif r == 5: # all + elif r == 6: # all ret = skipall = True - elif r == 6: # quit + elif r == 7: # quit raise util.Abort(_('user quit')) - return ret, skipfile, skipall + return ret, skipfile, skipall, newpatches seen = set() applied = {} # 'filename' -> [] of chunks @@ -326,7 +380,7 @@ def filterpatch(ui, headers): h.pretty(ui) msg = (_('examine changes to %s?') % _(' and ').join(map(repr, h.files()))) - r, skipfile, skipall = prompt(skipfile, skipall, msg) + r, skipfile, skipall, np = prompt(skipfile, skipall, msg, None) if not r: continue applied[h.filename()] = [h] @@ -342,12 +396,19 @@ def filterpatch(ui, headers): idx = pos - len(h.hunks) + i msg = _('record change %d/%d to %r?') % (idx, total, chunk.filename()) - r, skipfile, skipall = prompt(skipfile, skipall, msg) + r, skipfile, skipall, newpatches = prompt(skipfile, + skipall, msg, chunk) if r: if fixoffset: chunk = copy.copy(chunk) chunk.toline += fixoffset applied[chunk.filename()].append(chunk) + elif newpatches is not None: + for newpatch in newpatches: + for newhunk in newpatch.hunks: + if fixoffset: + newhunk.toline += fixoffset + applied[newhunk.filename()].append(newhunk) else: fixoffset += chunk.removed - chunk.added return sum([h for h in applied.itervalues() @@ -372,6 +433,7 @@ def record(ui, repo, *pats, **opts): y - record this change n - skip this change + e - edit this change manually s - skip remaining changes to this file f - record remaining changes to this file diff --git a/tests/test-diff-color.t b/tests/test-diff-color.t --- a/tests/test-diff-color.t +++ b/tests/test-diff-color.t @@ -85,7 +85,7 @@ record \x1b[0;36;1mold mode 100644\x1b[0m (esc) \x1b[0;36;1mnew mode 100755\x1b[0m (esc) 1 hunks, 1 lines changed - \x1b[0;33mexamine changes to 'a'? [Ynsfdaq?]\x1b[0m (esc) + \x1b[0;33mexamine changes to 'a'? [Ynesfdaq?]\x1b[0m (esc) \x1b[0;35m@@ -2,7 +2,7 @@\x1b[0m (esc) c a @@ -95,7 +95,7 @@ record a a c - \x1b[0;33mrecord this change to 'a'? [Ynsfdaq?]\x1b[0m (esc) + \x1b[0;33mrecord this change to 'a'? [Ynesfdaq?]\x1b[0m (esc) $ echo "[extensions]" >> $HGRCPATH $ echo "mq=" >> $HGRCPATH @@ -113,7 +113,7 @@ qrecord \x1b[0;36;1mold mode 100644\x1b[0m (esc) \x1b[0;36;1mnew mode 100755\x1b[0m (esc) 1 hunks, 1 lines changed - \x1b[0;33mexamine changes to 'a'? [Ynsfdaq?]\x1b[0m (esc) + \x1b[0;33mexamine changes to 'a'? [Ynesfdaq?]\x1b[0m (esc) \x1b[0;35m@@ -2,7 +2,7 @@\x1b[0m (esc) c a @@ -123,4 +123,4 @@ qrecord a a c - \x1b[0;33mrecord this change to 'a'? [Ynsfdaq?]\x1b[0m (esc) + \x1b[0;33mrecord this change to 'a'? [Ynesfdaq?]\x1b[0m (esc) diff --git a/tests/test-keyword.t b/tests/test-keyword.t --- a/tests/test-keyword.t +++ b/tests/test-keyword.t @@ -338,18 +338,18 @@ record chunk > EOF diff --git a/a b/a 2 hunks, 2 lines changed - examine changes to 'a'? [Ynsfdaq?] + examine changes to 'a'? [Ynesfdaq?] @@ -1,3 +1,4 @@ expand $Id$ +foo do not process $Id: xxx $ - record change 1/2 to 'a'? [Ynsfdaq?] + record change 1/2 to 'a'? [Ynesfdaq?] @@ -2,2 +3,3 @@ do not process $Id: xxx $ +bar - record change 2/2 to 'a'? [Ynsfdaq?] + record change 2/2 to 'a'? [Ynesfdaq?] $ hg identify d17e03c92c97+ tip @@ -395,18 +395,18 @@ Record all chunks in file a > EOF diff --git a/a b/a 2 hunks, 2 lines changed - examine changes to 'a'? [Ynsfdaq?] + examine changes to 'a'? [Ynesfdaq?] @@ -1,3 +1,4 @@ expand $Id$ +foo do not process $Id: xxx $ - record change 1/2 to 'a'? [Ynsfdaq?] + record change 1/2 to 'a'? [Ynesfdaq?] @@ -2,2 +3,3 @@ do not process $Id: xxx $ +bar - record change 2/2 to 'a'? [Ynsfdaq?] + record change 2/2 to 'a'? [Ynesfdaq?] File a should be clean @@ -462,7 +462,7 @@ record added file alone > EOF diff --git a/r b/r new file mode 100644 - examine changes to 'r'? [Ynsfdaq?] + examine changes to 'r'? [Ynesfdaq?] r committed changeset 3:899491280810 overwriting r expanding keywords @@ -486,7 +486,7 @@ record added keyword ignored file > EOF diff --git a/i b/i new file mode 100644 - examine changes to 'i'? [Ynsfdaq?] + examine changes to 'i'? [Ynesfdaq?] i committed changeset 3:5f40fe93bbdc $ cat i diff --git a/tests/test-mq-qrefresh-interactive.t b/tests/test-mq-qrefresh-interactive.t --- a/tests/test-mq-qrefresh-interactive.t +++ b/tests/test-mq-qrefresh-interactive.t @@ -185,22 +185,22 @@ partial qrefresh > EOF diff --git a/1.txt b/1.txt 2 hunks, 2 lines changed - examine changes to '1.txt'? [Ynsfdaq?] + examine changes to '1.txt'? [Ynesfdaq?] @@ -1,3 +1,3 @@ 1 -2 +2 2 3 - record change 1/4 to '1.txt'? [Ynsfdaq?] + record change 1/4 to '1.txt'? [Ynesfdaq?] @@ -3,3 +3,3 @@ 3 -4 +4 4 5 - record change 2/4 to '1.txt'? [Ynsfdaq?] + record change 2/4 to '1.txt'? [Ynesfdaq?] diff --git a/2.txt b/2.txt 1 hunks, 1 lines changed - examine changes to '2.txt'? [Ynsfdaq?] + examine changes to '2.txt'? [Ynesfdaq?] @@ -1,5 +1,5 @@ a -b @@ -208,10 +208,10 @@ partial qrefresh c d e - record change 3/4 to '2.txt'? [Ynsfdaq?] + record change 3/4 to '2.txt'? [Ynesfdaq?] diff --git a/dir/a.txt b/dir/a.txt 1 hunks, 1 lines changed - examine changes to 'dir/a.txt'? [Ynsfdaq?] + examine changes to 'dir/a.txt'? [Ynesfdaq?] After partial qrefresh 'tip' @@ -279,7 +279,7 @@ qrefresh interactively everything else > EOF diff --git a/1.txt b/1.txt 1 hunks, 1 lines changed - examine changes to '1.txt'? [Ynsfdaq?] + examine changes to '1.txt'? [Ynesfdaq?] @@ -1,5 +1,5 @@ 1 2 2 @@ -287,17 +287,17 @@ qrefresh interactively everything else -4 +4 4 5 - record change 1/2 to '1.txt'? [Ynsfdaq?] + record change 1/2 to '1.txt'? [Ynesfdaq?] diff --git a/dir/a.txt b/dir/a.txt 1 hunks, 1 lines changed - examine changes to 'dir/a.txt'? [Ynsfdaq?] + examine changes to 'dir/a.txt'? [Ynesfdaq?] @@ -1,4 +1,4 @@ -hello world +hello world! someone up - record change 2/2 to 'dir/a.txt'? [Ynsfdaq?] + record change 2/2 to 'dir/a.txt'? [Ynesfdaq?] After final qrefresh 'tip' diff --git a/tests/test-mq-subrepo.t b/tests/test-mq-subrepo.t --- a/tests/test-mq-subrepo.t +++ b/tests/test-mq-subrepo.t @@ -263,7 +263,7 @@ handle subrepos safely on qrecord % qrecord --config ui.interactive=1 -m0 0.diff diff --git a/.hgsub b/.hgsub new file mode 100644 - examine changes to '.hgsub'? [Ynsfdaq?] + examine changes to '.hgsub'? [Ynesfdaq?] abort: uncommitted changes in subrepository sub [255] % update substate when adding .hgsub w/clean updated subrepo @@ -271,7 +271,7 @@ handle subrepos safely on qrecord % qrecord --config ui.interactive=1 -m0 0.diff diff --git a/.hgsub b/.hgsub new file mode 100644 - examine changes to '.hgsub'? [Ynsfdaq?] + examine changes to '.hgsub'? [Ynesfdaq?] path sub source sub revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31 @@ -287,11 +287,11 @@ handle subrepos safely on qrecord % qrecord --config ui.interactive=1 -m1 1.diff diff --git a/.hgsub b/.hgsub 1 hunks, 1 lines changed - examine changes to '.hgsub'? [Ynsfdaq?] + examine changes to '.hgsub'? [Ynesfdaq?] @@ -1,1 +1,2 @@ sub = sub +sub2 = sub2 - record this change to '.hgsub'? [Ynsfdaq?] + record this change to '.hgsub'? [Ynesfdaq?] abort: uncommitted changes in subrepository sub2 [255] % update substate when modifying .hgsub w/clean updated subrepo @@ -299,11 +299,11 @@ handle subrepos safely on qrecord % qrecord --config ui.interactive=1 -m1 1.diff diff --git a/.hgsub b/.hgsub 1 hunks, 1 lines changed - examine changes to '.hgsub'? [Ynsfdaq?] + examine changes to '.hgsub'? [Ynesfdaq?] @@ -1,1 +1,2 @@ sub = sub +sub2 = sub2 - record this change to '.hgsub'? [Ynsfdaq?] + record this change to '.hgsub'? [Ynesfdaq?] path sub source sub revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31 @@ -324,7 +324,7 @@ handle subrepos safely on qrecord % qrecord --config ui.interactive=1 -m2 2.diff diff --git a/.hgsub b/.hgsub deleted file mode 100644 - examine changes to '.hgsub'? [Ynsfdaq?] + examine changes to '.hgsub'? [Ynesfdaq?] % debugsub should be empty $ hg qpop -qa @@ -339,7 +339,7 @@ handle subrepos safely on qrecord % qrecord --config ui.interactive=1 -m3 3.diff diff --git a/.hgsub b/.hgsub deleted file mode 100644 - examine changes to '.hgsub'? [Ynsfdaq?] + examine changes to '.hgsub'? [Ynesfdaq?] % debugsub should be empty $ cd .. diff --git a/tests/test-qrecord.t b/tests/test-qrecord.t --- a/tests/test-qrecord.t +++ b/tests/test-qrecord.t @@ -40,6 +40,7 @@ help record (record) y - record this change n - skip this change + e - edit this change manually s - skip remaining changes to this file f - record remaining changes to this file @@ -245,22 +246,22 @@ qrecord a.patch > EOF diff --git a/1.txt b/1.txt 2 hunks, 2 lines changed - examine changes to '1.txt'? [Ynsfdaq?] + examine changes to '1.txt'? [Ynesfdaq?] @@ -1,3 +1,3 @@ 1 -2 +2 2 3 - record change 1/4 to '1.txt'? [Ynsfdaq?] + record change 1/4 to '1.txt'? [Ynesfdaq?] @@ -3,3 +3,3 @@ 3 -4 +4 4 5 - record change 2/4 to '1.txt'? [Ynsfdaq?] + record change 2/4 to '1.txt'? [Ynesfdaq?] diff --git a/2.txt b/2.txt 1 hunks, 1 lines changed - examine changes to '2.txt'? [Ynsfdaq?] + examine changes to '2.txt'? [Ynesfdaq?] @@ -1,5 +1,5 @@ a -b @@ -268,10 +269,10 @@ qrecord a.patch c d e - record change 3/4 to '2.txt'? [Ynsfdaq?] + record change 3/4 to '2.txt'? [Ynesfdaq?] diff --git a/dir/a.txt b/dir/a.txt 1 hunks, 1 lines changed - examine changes to 'dir/a.txt'? [Ynsfdaq?] + examine changes to 'dir/a.txt'? [Ynesfdaq?] After qrecord a.patch 'tip'" @@ -340,7 +341,7 @@ qrecord b.patch > EOF diff --git a/1.txt b/1.txt 1 hunks, 1 lines changed - examine changes to '1.txt'? [Ynsfdaq?] + examine changes to '1.txt'? [Ynesfdaq?] @@ -1,5 +1,5 @@ 1 2 2 @@ -348,17 +349,17 @@ qrecord b.patch -4 +4 4 5 - record change 1/2 to '1.txt'? [Ynsfdaq?] + record change 1/2 to '1.txt'? [Ynesfdaq?] diff --git a/dir/a.txt b/dir/a.txt 1 hunks, 1 lines changed - examine changes to 'dir/a.txt'? [Ynsfdaq?] + examine changes to 'dir/a.txt'? [Ynesfdaq?] @@ -1,4 +1,4 @@ -hello world +hello world! someone up - record change 2/2 to 'dir/a.txt'? [Ynsfdaq?] + record change 2/2 to 'dir/a.txt'? [Ynesfdaq?] After qrecord b.patch 'tip' diff --git a/tests/test-record.t b/tests/test-record.t --- a/tests/test-record.t +++ b/tests/test-record.t @@ -20,7 +20,7 @@ Select no files > EOF diff --git a/empty-rw b/empty-rw new file mode 100644 - examine changes to 'empty-rw'? [Ynsfdaq?] + examine changes to 'empty-rw'? [Ynesfdaq?] no changes to record $ hg tip -p @@ -39,7 +39,7 @@ Select files but no hunks > EOF diff --git a/empty-rw b/empty-rw new file mode 100644 - examine changes to 'empty-rw'? [Ynsfdaq?] + examine changes to 'empty-rw'? [Ynesfdaq?] abort: empty commit message [255] @@ -59,7 +59,7 @@ Record empty file > EOF diff --git a/empty-rw b/empty-rw new file mode 100644 - examine changes to 'empty-rw'? [Ynsfdaq?] + examine changes to 'empty-rw'? [Ynesfdaq?] $ hg tip -p changeset: 0:c0708cf4e46e @@ -88,7 +88,7 @@ Rename empty file diff --git a/empty-rw b/empty-rename rename from empty-rw rename to empty-rename - examine changes to 'empty-rw' and 'empty-rename'? [Ynsfdaq?] + examine changes to 'empty-rw' and 'empty-rename'? [Ynesfdaq?] $ hg tip -p changeset: 1:d695e8dcb197 @@ -108,7 +108,7 @@ Copy empty file diff --git a/empty-rename b/empty-copy copy from empty-rename copy to empty-copy - examine changes to 'empty-rename' and 'empty-copy'? [Ynsfdaq?] + examine changes to 'empty-rename' and 'empty-copy'? [Ynesfdaq?] $ hg tip -p changeset: 2:1d4b90bea524 @@ -127,7 +127,7 @@ Delete empty file > EOF diff --git a/empty-copy b/empty-copy deleted file mode 100644 - examine changes to 'empty-copy'? [Ynsfdaq?] + examine changes to 'empty-copy'? [Ynesfdaq?] $ hg tip -p changeset: 3:b39a238f01a1 @@ -149,7 +149,7 @@ Add binary file diff --git a/tip.bundle b/tip.bundle new file mode 100644 this is a binary file - examine changes to 'tip.bundle'? [Ynsfdaq?] + examine changes to 'tip.bundle'? [Ynesfdaq?] $ hg tip -p changeset: 4:ad816da3711e @@ -171,7 +171,7 @@ Change binary file > EOF diff --git a/tip.bundle b/tip.bundle this modifies a binary file (all or nothing) - examine changes to 'tip.bundle'? [Ynsfdaq?] + examine changes to 'tip.bundle'? [Ynesfdaq?] $ hg tip -p changeset: 5:dccd6f3eb485 @@ -196,7 +196,7 @@ Rename and change binary file rename from tip.bundle rename to top.bundle this modifies a binary file (all or nothing) - examine changes to 'tip.bundle' and 'top.bundle'? [Ynsfdaq?] + examine changes to 'tip.bundle' and 'top.bundle'? [Ynesfdaq?] $ hg tip -p changeset: 6:7fa44105f5b3 @@ -224,7 +224,7 @@ Add plain file > EOF diff --git a/plain b/plain new file mode 100644 - examine changes to 'plain'? [Ynsfdaq?] + examine changes to 'plain'? [Ynesfdaq?] $ hg tip -p changeset: 7:11fb457c1be4 @@ -258,13 +258,13 @@ Modify end of plain file > EOF diff --git a/plain b/plain 1 hunks, 1 lines changed - examine changes to 'plain'? [Ynsfdaq?] + examine changes to 'plain'? [Ynesfdaq?] @@ -8,3 +8,4 @@ 8 9 10 +11 - record this change to 'plain'? [Ynsfdaq?] + record this change to 'plain'? [Ynesfdaq?] Modify end of plain file, no EOL @@ -275,14 +275,14 @@ Modify end of plain file, no EOL > EOF diff --git a/plain b/plain 1 hunks, 1 lines changed - examine changes to 'plain'? [Ynsfdaq?] + examine changes to 'plain'? [Ynesfdaq?] @@ -9,3 +9,4 @@ 9 10 11 +7264f99c5f5ff3261504828afa4fb4d406c3af54 \ No newline at end of file - record this change to 'plain'? [Ynsfdaq?] + record this change to 'plain'? [Ynesfdaq?] Modify end of plain file, add EOL @@ -296,7 +296,7 @@ Modify end of plain file, add EOL > EOF diff --git a/plain b/plain 1 hunks, 1 lines changed - examine changes to 'plain'? [Ynsfdaq?] + examine changes to 'plain'? [Ynesfdaq?] @@ -9,4 +9,4 @@ 9 10 @@ -304,10 +304,10 @@ Modify end of plain file, add EOL -7264f99c5f5ff3261504828afa4fb4d406c3af54 \ No newline at end of file +7264f99c5f5ff3261504828afa4fb4d406c3af54 - record change 1/2 to 'plain'? [Ynsfdaq?] + record change 1/2 to 'plain'? [Ynesfdaq?] diff --git a/plain2 b/plain2 new file mode 100644 - examine changes to 'plain2'? [Ynsfdaq?] + examine changes to 'plain2'? [Ynesfdaq?] Modify beginning, trim end, record both, add another file to test changes numbering @@ -327,28 +327,28 @@ changes numbering > EOF diff --git a/plain b/plain 2 hunks, 3 lines changed - examine changes to 'plain'? [Ynsfdaq?] + examine changes to 'plain'? [Ynesfdaq?] @@ -1,4 +1,4 @@ -1 +2 2 3 4 - record change 1/3 to 'plain'? [Ynsfdaq?] + record change 1/3 to 'plain'? [Ynesfdaq?] @@ -8,5 +8,3 @@ 8 9 10 -11 -7264f99c5f5ff3261504828afa4fb4d406c3af54 - record change 2/3 to 'plain'? [Ynsfdaq?] + record change 2/3 to 'plain'? [Ynesfdaq?] diff --git a/plain2 b/plain2 1 hunks, 1 lines changed - examine changes to 'plain2'? [Ynsfdaq?] + examine changes to 'plain2'? [Ynesfdaq?] @@ -1,1 +1,2 @@ 1 +2 - record change 3/3 to 'plain2'? [Ynsfdaq?] + record change 3/3 to 'plain2'? [Ynesfdaq?] $ hg tip -p changeset: 11:21df83db12b8 @@ -396,7 +396,7 @@ Record end > EOF diff --git a/plain b/plain 2 hunks, 4 lines changed - examine changes to 'plain'? [Ynsfdaq?] + examine changes to 'plain'? [Ynesfdaq?] @@ -1,9 +1,6 @@ -2 -2 @@ -407,7 +407,7 @@ Record end 7 8 9 - record change 1/2 to 'plain'? [Ynsfdaq?] + record change 1/2 to 'plain'? [Ynesfdaq?] @@ -4,7 +1,7 @@ 4 5 @@ -417,7 +417,7 @@ Record end 9 -10 +10.new - record change 2/2 to 'plain'? [Ynsfdaq?] + record change 2/2 to 'plain'? [Ynesfdaq?] $ hg tip -p changeset: 12:99337501826f @@ -445,7 +445,7 @@ Record beginning > EOF diff --git a/plain b/plain 1 hunks, 3 lines changed - examine changes to 'plain'? [Ynsfdaq?] + examine changes to 'plain'? [Ynesfdaq?] @@ -1,6 +1,3 @@ -2 -2 @@ -453,7 +453,7 @@ Record beginning 4 5 6 - record this change to 'plain'? [Ynsfdaq?] + record this change to 'plain'? [Ynesfdaq?] $ hg tip -p changeset: 13:bbd45465d540 @@ -490,7 +490,7 @@ Record end > EOF diff --git a/plain b/plain 2 hunks, 4 lines changed - examine changes to 'plain'? [Ynsfdaq?] + examine changes to 'plain'? [Ynesfdaq?] @@ -1,6 +1,9 @@ +1 +2 @@ -501,7 +501,7 @@ Record end 7 8 9 - record change 1/2 to 'plain'? [Ynsfdaq?] + record change 1/2 to 'plain'? [Ynesfdaq?] @@ -1,7 +4,6 @@ 4 5 @@ -510,7 +510,7 @@ Record end 8 9 -10.new - record change 2/2 to 'plain'? [Ynsfdaq?] + record change 2/2 to 'plain'? [Ynesfdaq?] Add to beginning, middle, end @@ -529,14 +529,14 @@ Record beginning, middle > EOF diff --git a/plain b/plain 3 hunks, 7 lines changed - examine changes to 'plain'? [Ynsfdaq?] + examine changes to 'plain'? [Ynesfdaq?] @@ -1,2 +1,5 @@ +1 +2 +3 4 5 - record change 1/3 to 'plain'? [Ynsfdaq?] + record change 1/3 to 'plain'? [Ynesfdaq?] @@ -1,6 +4,8 @@ 4 5 @@ -546,7 +546,7 @@ Record beginning, middle 7 8 9 - record change 2/3 to 'plain'? [Ynsfdaq?] + record change 2/3 to 'plain'? [Ynesfdaq?] @@ -3,4 +8,6 @@ 6 7 @@ -554,7 +554,7 @@ Record beginning, middle 9 +10 +11 - record change 3/3 to 'plain'? [Ynsfdaq?] + record change 3/3 to 'plain'? [Ynesfdaq?] $ hg tip -p changeset: 15:f34a7937ec33 @@ -587,14 +587,14 @@ Record end > EOF diff --git a/plain b/plain 1 hunks, 2 lines changed - examine changes to 'plain'? [Ynsfdaq?] + examine changes to 'plain'? [Ynesfdaq?] @@ -9,3 +9,5 @@ 7 8 9 +10 +11 - record this change to 'plain'? [Ynsfdaq?] + record this change to 'plain'? [Ynesfdaq?] $ hg tip -p changeset: 16:f9900b71a04c @@ -627,11 +627,11 @@ Record end > EOF diff --git a/subdir/a b/subdir/a 1 hunks, 1 lines changed - examine changes to 'subdir/a'? [Ynsfdaq?] + examine changes to 'subdir/a'? [Ynesfdaq?] @@ -1,1 +1,2 @@ a +a - record this change to 'subdir/a'? [Ynsfdaq?] + record this change to 'subdir/a'? [Ynesfdaq?] $ hg tip -p changeset: 18:61be427a9deb @@ -665,16 +665,17 @@ Help, quit > EOF diff --git a/subdir/f1 b/subdir/f1 1 hunks, 1 lines changed - examine changes to 'subdir/f1'? [Ynsfdaq?] + examine changes to 'subdir/f1'? [Ynesfdaq?] y - record this change n - skip this change + e - edit this change manually s - skip remaining changes to this file f - record remaining changes to this file d - done, skip remaining changes and files a - record all changes to all remaining files q - quit, recording no changes ? - display help - examine changes to 'subdir/f1'? [Ynsfdaq?] + examine changes to 'subdir/f1'? [Ynesfdaq?] abort: user quit [255] @@ -685,10 +686,10 @@ Skip > EOF diff --git a/subdir/f1 b/subdir/f1 1 hunks, 1 lines changed - examine changes to 'subdir/f1'? [Ynsfdaq?] + examine changes to 'subdir/f1'? [Ynesfdaq?] diff --git a/subdir/f2 b/subdir/f2 1 hunks, 1 lines changed - examine changes to 'subdir/f2'? [Ynsfdaq?] abort: response expected + examine changes to 'subdir/f2'? [Ynesfdaq?] abort: response expected [255] No @@ -698,10 +699,10 @@ No > EOF diff --git a/subdir/f1 b/subdir/f1 1 hunks, 1 lines changed - examine changes to 'subdir/f1'? [Ynsfdaq?] + examine changes to 'subdir/f1'? [Ynesfdaq?] diff --git a/subdir/f2 b/subdir/f2 1 hunks, 1 lines changed - examine changes to 'subdir/f2'? [Ynsfdaq?] abort: response expected + examine changes to 'subdir/f2'? [Ynesfdaq?] abort: response expected [255] f, quit @@ -712,10 +713,10 @@ f, quit > EOF diff --git a/subdir/f1 b/subdir/f1 1 hunks, 1 lines changed - examine changes to 'subdir/f1'? [Ynsfdaq?] + examine changes to 'subdir/f1'? [Ynesfdaq?] diff --git a/subdir/f2 b/subdir/f2 1 hunks, 1 lines changed - examine changes to 'subdir/f2'? [Ynsfdaq?] + examine changes to 'subdir/f2'? [Ynesfdaq?] abort: user quit [255] @@ -727,10 +728,10 @@ s, all > EOF diff --git a/subdir/f1 b/subdir/f1 1 hunks, 1 lines changed - examine changes to 'subdir/f1'? [Ynsfdaq?] + examine changes to 'subdir/f1'? [Ynesfdaq?] diff --git a/subdir/f2 b/subdir/f2 1 hunks, 1 lines changed - examine changes to 'subdir/f2'? [Ynsfdaq?] + examine changes to 'subdir/f2'? [Ynesfdaq?] $ hg tip -p changeset: 20:b3df3dda369a @@ -754,7 +755,7 @@ f > EOF diff --git a/subdir/f1 b/subdir/f1 1 hunks, 1 lines changed - examine changes to 'subdir/f1'? [Ynsfdaq?] + examine changes to 'subdir/f1'? [Ynesfdaq?] $ hg tip -p changeset: 21:38ec577f126b @@ -784,12 +785,12 @@ Preserve chmod +x old mode 100644 new mode 100755 1 hunks, 1 lines changed - examine changes to 'subdir/f1'? [Ynsfdaq?] + examine changes to 'subdir/f1'? [Ynesfdaq?] @@ -1,2 +1,3 @@ a a +a - record this change to 'subdir/f1'? [Ynsfdaq?] + record this change to 'subdir/f1'? [Ynesfdaq?] $ hg tip --config diff.git=True -p changeset: 22:3261adceb075 @@ -819,13 +820,13 @@ Preserve execute permission on original > EOF diff --git a/subdir/f1 b/subdir/f1 1 hunks, 1 lines changed - examine changes to 'subdir/f1'? [Ynsfdaq?] + examine changes to 'subdir/f1'? [Ynesfdaq?] @@ -1,3 +1,4 @@ a a a +b - record this change to 'subdir/f1'? [Ynsfdaq?] + record this change to 'subdir/f1'? [Ynesfdaq?] $ hg tip --config diff.git=True -p changeset: 23:b429867550db @@ -857,13 +858,13 @@ Preserve chmod -x old mode 100755 new mode 100644 1 hunks, 1 lines changed - examine changes to 'subdir/f1'? [Ynsfdaq?] + examine changes to 'subdir/f1'? [Ynesfdaq?] @@ -2,3 +2,4 @@ a a b +c - record this change to 'subdir/f1'? [Ynsfdaq?] + record this change to 'subdir/f1'? [Ynesfdaq?] $ hg tip --config diff.git=True -p changeset: 24:0b082130c20a @@ -914,6 +915,150 @@ Abort early when a merge is in progress $ hg up -C 0 files updated, 0 files merged, 1 files removed, 0 files unresolved +Editing patch + + $ cat > editor << '__EOF__' + > #!/bin/sh + > sed -i -e 7d -e '5s/^-/ /' "$1" + > __EOF__ + $ chmod +x editor + $ cat > editedfile << '__EOF__' + > This is the first line + > This is the second line + > This is the third line + > __EOF__ + $ hg add editedfile + $ hg commit -medit-patch-1 + $ cat > editedfile << '__EOF__' + > This line has changed + > This change will be committed + > This is the third line + > __EOF__ + $ HGEDITOR="'`pwd`'"/editor hg record -d '23 0' -medit-patch-2 < y + > e + > EOF + diff --git a/editedfile b/editedfile + 1 hunks, 2 lines changed + examine changes to 'editedfile'? [Ynesfdaq?] + @@ -1,3 +1,3 @@ + -This is the first line + -This is the second line + +This line has changed + +This change will be committed + This is the third line + record this change to 'editedfile'? [Ynesfdaq?] + $ cat editedfile + This line has changed + This change will be committed + This is the third line + $ hg cat -r tip editedfile + This is the first line + This change will be committed + This is the third line + $ hg revert editedfile + +Trying to edit patch for whole file + + $ echo "This is the fourth line" >> editedfile + $ hg record < e + > q + > EOF + diff --git a/editedfile b/editedfile + 1 hunks, 1 lines changed + examine changes to 'editedfile'? [Ynesfdaq?] + cannot edit patch for whole file + examine changes to 'editedfile'? [Ynesfdaq?] + abort: user quit + [255] + $ hg revert editedfile + +Removing changes from patch + + $ sed -i -e '3s/third/second/' -e '2s/will/will not/' -e 1d editedfile + $ echo "This line has been added" >> editedfile + $ cat > editor << '__EOF__' + > #!/bin/sh + > sed -i -e 's/^[-+]/ /' "$1" + > __EOF__ + $ chmod +x editor + $ HGEDITOR="'`pwd`'"/editor hg record < y + > e + > EOF + diff --git a/editedfile b/editedfile + 1 hunks, 3 lines changed + examine changes to 'editedfile'? [Ynesfdaq?] + @@ -1,3 +1,3 @@ + -This is the first line + -This change will be committed + -This is the third line + +This change will not be committed + +This is the second line + +This line has been added + record this change to 'editedfile'? [Ynesfdaq?] + no changes to record + $ cat editedfile + This change will not be committed + This is the second line + This line has been added + $ hg cat -r tip editedfile + This is the first line + This change will be committed + This is the third line + $ hg revert editedfile + +Invalid patch + + $ sed -i -e '3s/third/second/' -e '2s/will/will not/' -e 1d editedfile + $ echo "This line has been added" >> editedfile + $ cat > editor << '__EOF__' + > #!/bin/sh + > sed -i s/This/That/ "$1" + > __EOF__ + $ chmod +x editor + $ HGEDITOR="'`pwd`'"/editor hg record < y + > e + > EOF + diff --git a/editedfile b/editedfile + 1 hunks, 3 lines changed + examine changes to 'editedfile'? [Ynesfdaq?] + @@ -1,3 +1,3 @@ + -This is the first line + -This change will be committed + -This is the third line + +This change will not be committed + +This is the second line + +This line has been added + record this change to 'editedfile'? [Ynesfdaq?] + patching file editedfile + Hunk #1 FAILED at 0 + 1 out of 1 hunks FAILED -- saving rejects to file editedfile.rej + abort: patch failed to apply + [255] + $ cat editedfile + This change will not be committed + This is the second line + This line has been added + $ hg cat -r tip editedfile + This is the first line + This change will be committed + This is the third line + $ cat editedfile.rej + --- editedfile + +++ editedfile + @@ -1,3 +1,3 @@ + -That is the first line + -That change will be committed + -That is the third line + +That change will not be committed + +That is the second line + +That line has been added + $ hg up -C + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + With win32text $ echo '[extensions]' >> .hg/hgrc @@ -931,31 +1076,30 @@ Ignore win32text deprecation warning for $ echo 'warn = no' >> .hg/hgrc $ echo d >> subdir/f1 - $ hg record -d '23 0' -mw1 < y > y > EOF diff --git a/subdir/f1 b/subdir/f1 1 hunks, 1 lines changed - examine changes to 'subdir/f1'? [Ynsfdaq?] + examine changes to 'subdir/f1'? [Ynesfdaq?] @@ -3,3 +3,4 @@ a b c +d - record this change to 'subdir/f1'? [Ynsfdaq?] + record this change to 'subdir/f1'? [Ynesfdaq?] $ hg tip -p - changeset: 26:b8306e70edc4 + changeset: 28:287ad1f41a72 tag: tip - parent: 24:0b082130c20a user: test - date: Thu Jan 01 00:00:23 1970 +0000 + date: Thu Jan 01 00:00:24 1970 +0000 summary: w1 - diff -r 0b082130c20a -r b8306e70edc4 subdir/f1 - --- a/subdir/f1 Thu Jan 01 00:00:22 1970 +0000 - +++ b/subdir/f1 Thu Jan 01 00:00:23 1970 +0000 + diff -r 65ce23a81197 -r 287ad1f41a72 subdir/f1 + --- a/subdir/f1 Thu Jan 01 00:00:23 1970 +0000 + +++ b/subdir/f1 Thu Jan 01 00:00:24 1970 +0000 @@ -3,3 +3,4 @@ a b