Re: importing mercurial patch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Johannes!

On Tue, Nov 11, 2008 at 3:41 PM, Johannes Schindelin
<Johannes.Schindelin@xxxxxx> wrote:
> Hi,
>
> On Tue, 11 Nov 2008, Ondrej Certik wrote:
>
>> But imho if git supported mercurial patches, life would be a lot easier.
>
> Mine would not be.

Because you don't use Mercurial, or is there also some other reason?

> BTW I had to be online (which is not always the case when I read email) to
> access the pastebin, which made it more of a hassle to look at it than I
> deem necessary.  Besides, it is bad because in 3 days, that pastie will be
> gone.  Not nice.

You are right, sorry about that.

>
> So here is it, for the pleasure of others:
>
>        # HG changeset patch
>        # User Vinzent Steinberg <vinzent.steinberg@xxxxxxxxx>
>        # Date 1226338168 -3600
>        # Node ID 23efeaf89f7089d94307526ec0536eb6f4382213
>        # Parent  dab6435e04fd083d66bbfa897cbe15ab9660b9e6
>        <commit subject>
>
>        <commit body>
>
>        diff -r <commit name> -r <commit name> <filename>
>        --- a/<filename> <date>
>        --- b/<filename> <date>
>        @@ <line range pair> @@
>        ...
>
> So what I suggest is that you familiarize yourself with
> builtin-mailsplit.c.  Basically you'd need to enhance the is_from_line()
> function to check this:
>
>        const char *hg_patch_preamble = "# HG changeset patch\n";
>
>        if (len >= strlen(hg_patch_preamble) && !memcmp(line,
>                        hg_patch_preamble, strlen(hg_patch_preamble))
>                return 1;
>
> Then you need to familiarize yourself with builtin-mailinfo.c.  In
> function mailinfo(), you'd need to work on this:
>
>        /* process the email header */
>        while (read_one_header_line(&line, fin))
>                check_header(&line, p_hdr_data, 1);
>
> I'd suggest to make the function read_one_header_line() into a
> handle_one_header_line(), and replace the while loop with this:
>
>        if (!strbuf_getline(&line, fin)) {
>                if (!strcmp(line.buf, "# HG changeset patch\n"))
>                        while (handle_one_hg_header_line(&line,
>                                        p_hdr_data, fin))
>                                strbuf_getline(&line, fin);
>                else
>                        while (handle_one_header_line(&line, fin)) {
>                                check_header(&line, p_hdr_data, 1);
>                                strbuf_getline(&line, fin);
>                        }
>        }
>
> Implementing handle_one_hg_header_line() should be a breeze:
>
>        static int handle_one_hg_header_line(struct strbuf *line,
>                        struct strbuf *hdr_data[], FILE *in)
>        {
>                if (line.buf[0] != '#') {
>                        strbuf_addbuf(hdr_data[1], line);
>                        return 0; /* no more headers */
>                }
>
>                if (!prefixcmp(line.buf, "# User "))
>                        strbuf_addstr(hdr_data[0], line.buf + 7);
>                else if (!prefixcmp(line.buf, "# Date "))
>                        strbuf_addstr(hdr_data[2], line.buf + 7);
>                return 1;
>        }
>
> Okay, this is all utterly untested, and you probably need to trim the
> newlines from the lines first, and maybe you need to replace the
> hdr_data[] entries instead of adding to them, but now you have a starting
> point.

Thanks a lot for the detailed help, I'll give it a shot and report
back in couple days, hopefully with a working patch. :)

Ondrej
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux