All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Sipek <jeffpc@josefsipek.net>
To: Per Cederqvist <cederp@opera.com>
Cc: git@vger.kernel.org
Subject: Re: [GUILT 06/28] Fix and simplify the do_get_patch function.
Date: Tue, 6 May 2014 15:08:30 -0400	[thread overview]
Message-ID: <20140506190830.GJ1655@meili.valhalla.31bits.net> (raw)
In-Reply-To: <CAP=KgsQtJb3t1c7qK8reO6nzMJppoV-zooK16ZZcWmCirAr3ew@mail.gmail.com>

On Sun, Mar 23, 2014 at 10:03:48PM +0100, Per Cederqvist wrote:
> On Sun, Mar 23, 2014 at 6:09 PM, Jeff Sipek <jeffpc@josefsipek.net> wrote:
> 
> > On Fri, Mar 21, 2014 at 08:31:44AM +0100, Per Cederqvist wrote:
> >> When extracting the patch, we only want the actual patches.  We don't
> >> want the "---" delimiter.  Simplify the extraction by simply deleting
> >> everything before the first "diff " line.  (Use sed instead of awk to
> >> simplify the code.)
> >>
> >> Without this patch, "guilt fold" and "guilt push" sometimes fails if
> >> guilt.diffstat is true.

Hrm, I just did a test and guilt-push seems to work with a patch such as:

aoeuaoeu
this is
---
not a patch!
---
 foo |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/foo b/foo
index e69de29..203a557 100644
--- a/foo
+++ b/foo
@@ -0,0 +1 @@
+aoue

What sort of thing breaks fold/push?

...
> >> diff --git a/guilt b/guilt
> >> index 8701481..c59cd0f 100755
> >> --- a/guilt
> >> +++ b/guilt
> >> @@ -332,12 +332,7 @@ do_make_header()
> >>  # usage: do_get_patch patchfile
> >>  do_get_patch()
> >>  {
> >> -     awk '
> >> -BEGIN{}
> >> -/^(diff |---$|--- )/ {patch = 1}
> >> -patch == 1 {print $0}
> >> -END{}
> >> -' < "$1"
> >> +     sed -n '/^diff /,$p' < "$1"
> >
> > So, the thought behind this mess was to allow minimal patches to work.  The
> > 'diff' line is *not* required by patch(1)!
> 
> I see. I can see that this is sometimes useful, even though I think
> it is more important that guilt actually works with the patches itself
> creates.

Fair enough.  I'm convinced that we should assume that all patches start
with 'diff '.

...
> I had to solve a similar problem when I wrote my utility for diffing two
> diff files (https://git.lysator.liu.se/pdiffdiff). Based on the experience
> I got doing that, I propose this new do_get_patch function:
...
> 
> The idea is to collect lines that *might* start the patch in
> patchheader. Once we detect the start of the patch (via a
> line that matches "--- " or any of the mode change lines)
> we print the patcheader and the current line. If we get a
> line that neither looks like a patchheader nor starts a patch,
> we discard the patcheader. This is the case of a commit
> message with a line that starts with "diff ".
> 
> The function above solves the issue with lines that
> start with "diff " in the commit message.  On the other
> hand, it introduces the same issue for lines that start
> with for instance "old mode ".

Hrm.  I'm open to revisiting the get-patch/get-header functions to address
the ambiguity issues in the future.

> Actually, a smaller change that probably fixes the
> issue with diffstat is to replace
> 
> /^(diff |---$|--- )/ {patch = 1}
> 
> witih
> 
> /^(diff |--- )/ {patch = 1}
> 
> as the problem with the original implementation is that
> the "---\n" line that starts the diffstat should not start
> the patch.

(Thinking out loud...) I suppose there are three portions to a patch file...

(1) the description
(2) optional diffstat
(3) the patch

You just convinced me that the patch should start with '^diff '.  Currently,
the diffstat begins with '^---$'.  Sadly, the description can contain what
looks like the beginning of a diffstat or a patch.  In the case of
do_get_patch, we're only interested in the patch, so we can just look for
'^diff ' (because garbage before the diff itself seems to be ignored by
git).  (If we wanted to allow patches without the 'diff ' line, we'd need
'^(diff |--- )'.)

I feel like I'm missing something.

Jeff.

-- 
I'm somewhere between geek and normal.
		- Linus Torvalds

  reply	other threads:[~2014-05-06 19:08 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-21  7:31 [GUILT 00/28] Teach guilt import-commit how create legal patch names, and more Per Cederqvist
2014-03-21  7:31 ` [GUILT 01/28] The tests should not fail if guilt.diffstat is set Per Cederqvist
2014-03-21  7:31 ` [GUILT 02/28] Allow "guilt delete -f" to run from a dir which contains spaces Per Cederqvist
2014-03-21  7:31 ` [GUILT 03/28] Added test case for "guilt delete -f" Per Cederqvist
2014-03-21  7:31 ` [GUILT 04/28] Allow "guilt import-commit" to run from a dir which contains spaces Per Cederqvist
2014-03-23 17:04   ` Jeff Sipek
2014-03-23 19:57     ` Per Cederqvist
2014-03-23 20:07       ` Jeff Sipek
2014-03-23 21:13         ` Per Cederqvist
2014-05-06 18:27           ` Jeff Sipek
2014-03-21  7:31 ` [GUILT 05/28] "guilt new": Accept more than 4 arguments Per Cederqvist
2014-03-21  7:31 ` [GUILT 06/28] Fix and simplify the do_get_patch function Per Cederqvist
2014-03-23 17:09   ` Jeff Sipek
2014-03-23 21:03     ` Per Cederqvist
2014-05-06 19:08       ` Jeff Sipek [this message]
2014-05-07 20:44         ` Per Cederqvist
2014-03-21  7:31 ` [GUILT 07/28] Added test cases for "guilt fold" Per Cederqvist
2014-05-06 19:40   ` Jeff Sipek
2014-05-07 20:59     ` Per Cederqvist
2014-05-07 21:06       ` Jeff Sipek
2014-05-08 19:41         ` Per Cederqvist
2014-05-08 19:59           ` Jeff Sipek
2014-03-21  7:31 ` [GUILT 08/28] Added more test cases for "guilt new": empty patches Per Cederqvist
2014-03-21  7:31 ` [GUILT 09/28] Test suite: properly check the exit status of commands Per Cederqvist
2014-03-21  7:31 ` [GUILT 10/28] Run test_failed if the exit status of a test script is bad Per Cederqvist
2014-05-06 19:56   ` Jeff Sipek
2014-03-21  7:31 ` [GUILT 11/28] test suite: remove pointless redirection Per Cederqvist
2014-05-06 19:57   ` Jeff Sipek
2014-03-21  7:31 ` [GUILT 12/28] "guilt header": more robust header selection Per Cederqvist
2014-03-21  7:31 ` [GUILT 13/28] Check that "guilt header '.*'" fails Per Cederqvist
2014-03-21  7:31 ` [GUILT 14/28] Use "git check-ref-format" to validate patch names Per Cederqvist
2014-03-21  7:31 ` [GUILT 15/28] Produce legal patch names in guilt-import-commit Per Cederqvist
2014-03-21  7:31 ` [GUILT 16/28] Fix backslash handling when creating names of imported patches Per Cederqvist
2014-03-21  7:31 ` [GUILT 17/28] "guilt graph" no longer loops when no patches are applied Per Cederqvist
2014-05-06 20:10   ` Jeff Sipek
2014-03-21  7:31 ` [GUILT 18/28] guilt-graph: Handle commas in branch names Per Cederqvist
2014-05-06 20:13   ` Jeff Sipek
2014-03-21  7:31 ` [GUILT 19/28] Check that "guilt graph" works when working on a branch with a comma Per Cederqvist
2014-05-06 20:15   ` Jeff Sipek
2014-05-13 21:33   ` Jeff Sipek
2014-05-13 21:35     ` Jeff Sipek
2014-03-21  7:31 ` [GUILT 20/28] "guilt graph": Handle patch names containing quotes Per Cederqvist
2014-03-21  7:57   ` Eric Sunshine
2014-05-06 20:24     ` Jeff Sipek
2014-05-08 20:18       ` Per Cederqvist
2014-03-21  7:31 ` [GUILT 21/28] The log.decorate setting should not influence import-commit Per Cederqvist
2014-05-06 20:41   ` Jeff Sipek
2014-03-21  7:32 ` [GUILT 22/28] The log.decorate setting should not influence patchbomb Per Cederqvist
2014-05-06 20:41   ` Jeff Sipek
2014-03-21  7:32 ` [GUILT 23/28] The log.decorate setting should not influence guilt rebase Per Cederqvist
2014-05-06 20:41   ` Jeff Sipek
2014-03-21  7:32 ` [GUILT 24/28] disp no longer processes backslashes Per Cederqvist
2014-05-07 21:15   ` Jeff Sipek
2014-03-21  7:32 ` [GUILT 25/28] "guilt push" now fails when there are no more patches to push Per Cederqvist
2014-05-07 22:04   ` Jeff Sipek
2014-05-08 21:37     ` Per Cederqvist
2014-03-21  7:32 ` [GUILT 26/28] "guilt pop" now fails when there are no more patches to pop Per Cederqvist
2014-03-21  7:32 ` [GUILT 27/28] Minor testsuite fix Per Cederqvist
2014-05-07 21:09   ` Jeff Sipek
2014-03-21  7:32 ` [GUILT 28/28] Added guilt.reusebranch configuration option Per Cederqvist
2014-03-21 20:39 ` [GUILT 00/28] Teach guilt import-commit how create legal patch names, and more Jeff Sipek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140506190830.GJ1655@meili.valhalla.31bits.net \
    --to=jeffpc@josefsipek.net \
    --cc=cederp@opera.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.