git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 01/10] refs: add "for_each_bisect_ref" function
@ 2009-03-26  4:55 Christian Couder
  2009-03-26  6:20 ` Sverre Rabbelier
  0 siblings, 1 reply; 12+ messages in thread
From: Christian Couder @ 2009-03-26  4:55 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, John Tapsell, Johannes Schindelin

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 refs.c |    5 +++++
 refs.h |    1 +
 2 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/refs.c b/refs.c
index 8d3c502..2b21148 100644
--- a/refs.c
+++ b/refs.c
@@ -662,6 +662,11 @@ int for_each_remote_ref(each_ref_fn fn, void *cb_data)
 	return do_for_each_ref("refs/remotes/", fn, 13, 0, cb_data);
 }
 
+int for_each_bisect_ref(each_ref_fn fn, void *cb_data)
+{
+	return do_for_each_ref("refs/bisect/", fn, 12, 0, cb_data);
+}
+
 int for_each_rawref(each_ref_fn fn, void *cb_data)
 {
 	return do_for_each_ref("refs/", fn, 0,
diff --git a/refs.h b/refs.h
index 29bdcec..e5d6e80 100644
--- a/refs.h
+++ b/refs.h
@@ -23,6 +23,7 @@ extern int for_each_ref(each_ref_fn, void *);
 extern int for_each_tag_ref(each_ref_fn, void *);
 extern int for_each_branch_ref(each_ref_fn, void *);
 extern int for_each_remote_ref(each_ref_fn, void *);
+extern int for_each_bisect_ref(each_ref_fn, void *);
 
 /* can be used to learn about broken ref and symref */
 extern int for_each_rawref(each_ref_fn, void *);
-- 
1.6.2.1.317.g3d804

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function
  2009-03-26  4:55 [PATCH 01/10] refs: add "for_each_bisect_ref" function Christian Couder
@ 2009-03-26  6:20 ` Sverre Rabbelier
  2009-03-26  7:48   ` Christian Couder
  0 siblings, 1 reply; 12+ messages in thread
From: Sverre Rabbelier @ 2009-03-26  6:20 UTC (permalink / raw)
  To: Christian Couder; +Cc: Junio C Hamano, git, John Tapsell, Johannes Schindelin

Heya

On Thu, Mar 26, 2009 at 05:55, Christian Couder <chriscool@tuxfamily.org> wrote:
> Signed-off-by: Christian Couder <chriscool@tuxfamily.org>

A 10 patches series with no cover letter? And no description of the
individual patches either! C'mon Christian, you know better than that
;).

-- 
Cheers,

Sverre Rabbelier

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function
  2009-03-26  6:20 ` Sverre Rabbelier
@ 2009-03-26  7:48   ` Christian Couder
  2009-03-26 12:37     ` Sverre Rabbelier
  2009-03-26 15:50     ` Michael J Gruber
  0 siblings, 2 replies; 12+ messages in thread
From: Christian Couder @ 2009-03-26  7:48 UTC (permalink / raw)
  To: Sverre Rabbelier; +Cc: Junio C Hamano, git, John Tapsell, Johannes Schindelin

Hi Sverre,

Le jeudi 26 mars 2009, Sverre Rabbelier a écrit :
> Heya
>
> On Thu, Mar 26, 2009 at 05:55, Christian Couder <chriscool@tuxfamily.org> 
wrote:
> > Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
>
> A 10 patches series with no cover letter? 

I am not a big fan of cover letters. Usually I prefer adding comments in the 
patches.

> And no description of the 
> individual patches either! 

There is a commit message in each patch. And many of the patches are very 
small.

> C'mon Christian, you know better than that 
> ;).

If some commit messages are not clear enough, please tell me and I will try 
to improve them ;)

Regards,
Christian.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function
  2009-03-26  7:48   ` Christian Couder
@ 2009-03-26 12:37     ` Sverre Rabbelier
  2009-03-26 15:50     ` Michael J Gruber
  1 sibling, 0 replies; 12+ messages in thread
From: Sverre Rabbelier @ 2009-03-26 12:37 UTC (permalink / raw)
  To: Christian Couder; +Cc: Junio C Hamano, git, John Tapsell, Johannes Schindelin

Heya,

On Thu, Mar 26, 2009 at 08:48, Christian Couder <chriscool@tuxfamily.org> wrote:
> I am not a big fan of cover letters. Usually I prefer adding comments in the
> patches.

The downside of that is that it makes it harder to quickly scan the
series; now I have to go through each patch (which involves trying
finding which patch is next, as my MUA is retarded and doesn't
understand proper threading).

>> And no description of the
>> individual patches either!
>
> There is a commit message in each patch. And many of the patches are very
> small.

Hehe, my bad; the first one didn't have a commit message, which is the
one I looked at first.

> If some commit messages are not clear enough, please tell me and I will try
> to improve them ;)

The rest of the series is nicely readable, I guess I shouldn't send
whine mails before reading the entire series next time :).

-- 
Cheers,

Sverre Rabbelier

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function
  2009-03-26  7:48   ` Christian Couder
  2009-03-26 12:37     ` Sverre Rabbelier
@ 2009-03-26 15:50     ` Michael J Gruber
  2009-03-26 16:52       ` Johannes Schindelin
  1 sibling, 1 reply; 12+ messages in thread
From: Michael J Gruber @ 2009-03-26 15:50 UTC (permalink / raw)
  To: Christian Couder
  Cc: Sverre Rabbelier, Junio C Hamano, git, John Tapsell,
	Johannes Schindelin

Christian Couder venit, vidit, dixit 26.03.2009 08:48:
> Hi Sverre,
> 
> Le jeudi 26 mars 2009, Sverre Rabbelier a écrit :
>> Heya
>>
>> On Thu, Mar 26, 2009 at 05:55, Christian Couder <chriscool@tuxfamily.org> 
> wrote:
>>> Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
>>
>> A 10 patches series with no cover letter? 
> 
> I am not a big fan of cover letters. Usually I prefer adding comments in the 
> patches.

I'm sorry I have to say that, but your individual preferences don't
matter. Many of us would do things differently, each in their own way,
but people adjust to the list's preferences. It's a matter of attitude.
So, please...

Cheers,
Michael

> 
>> And no description of the 
>> individual patches either! 
> 
> There is a commit message in each patch. And many of the patches are very 
> small.
> 
>> C'mon Christian, you know better than that 
>> ;).
> 
> If some commit messages are not clear enough, please tell me and I will try 
> to improve them ;)
> 
> Regards,
> Christian.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function
  2009-03-26 15:50     ` Michael J Gruber
@ 2009-03-26 16:52       ` Johannes Schindelin
  2009-03-26 16:54         ` Sverre Rabbelier
  2009-03-27  0:41         ` Christian Couder
  0 siblings, 2 replies; 12+ messages in thread
From: Johannes Schindelin @ 2009-03-26 16:52 UTC (permalink / raw)
  To: Michael J Gruber
  Cc: Christian Couder, Sverre Rabbelier, Junio C Hamano, git,
	John Tapsell

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1362 bytes --]

Hi,

On Thu, 26 Mar 2009, Michael J Gruber wrote:

> Christian Couder venit, vidit, dixit 26.03.2009 08:48:
> 
> > Le jeudi 26 mars 2009, Sverre Rabbelier a écrit :
> >
> >> A 10 patches series with no cover letter?
> > 
> > I am not a big fan of cover letters. Usually I prefer adding comments 
> > in the patches.
> 
> I'm sorry I have to say that, but your individual preferences don't 
> matter. Many of us would do things differently, each in their own way, 
> but people adjust to the list's preferences. It's a matter of attitude. 
> So, please...

Actually, a better way to ask for a cover letter would have been to 
convince Christian.  So I'll try that.

>From the patch series' titles (especially when they are cropped due to the 
text window being too small to fit the indented thread), it is not all 
that obvious what you want to achieve with those 10 patches.

>From recent discussions, I seem to remember that you wanted to have some 
cute way to mark commits as non-testable during a bisect, and I further 
seem to remember that Junio said that very method should be usable outside 
of bisect, too.

Unfortunately, that does not reveal to me, quickly, what is the current 
state of affairs, and what you changed since the last time.

In addition, I am very sorry that I cannot review your patches; day job is 
killing me right now.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function
  2009-03-26 16:52       ` Johannes Schindelin
@ 2009-03-26 16:54         ` Sverre Rabbelier
  2009-03-27  0:41         ` Christian Couder
  1 sibling, 0 replies; 12+ messages in thread
From: Sverre Rabbelier @ 2009-03-26 16:54 UTC (permalink / raw)
  To: Johannes Schindelin
  Cc: Michael J Gruber, Christian Couder, Junio C Hamano, git,
	John Tapsell

Heya,

On Thu, Mar 26, 2009 at 17:52, Johannes Schindelin
<Johannes.Schindelin@gmx.de> > From the patch series' titles
(especially when they are cropped due to the
> text window being too small to fit the indented thread), it is not all
> that obvious what you want to achieve with those 10 patches.

<snip>

> Unfortunately, that does not reveal to me, quickly, what is the current
> state of affairs, and what you changed since the last time.

This is exactly what I meant to say, only worded much much better,
thanks Johannes! :)

-- 
Cheers,

Sverre Rabbelier

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function
  2009-03-26 16:52       ` Johannes Schindelin
  2009-03-26 16:54         ` Sverre Rabbelier
@ 2009-03-27  0:41         ` Christian Couder
  2009-03-27  1:32           ` sending patch sets (was: Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function) Julian Phillips
  2009-03-27  2:08           ` [PATCH 01/10] refs: add "for_each_bisect_ref" function Johannes Schindelin
  1 sibling, 2 replies; 12+ messages in thread
From: Christian Couder @ 2009-03-27  0:41 UTC (permalink / raw)
  To: Johannes Schindelin
  Cc: Michael J Gruber, Sverre Rabbelier, Junio C Hamano, git,
	John Tapsell

Le jeudi 26 mars 2009, Johannes Schindelin a écrit :
> Hi,
>
> On Thu, 26 Mar 2009, Michael J Gruber wrote:
> > Christian Couder venit, vidit, dixit 26.03.2009 08:48:
> > > Le jeudi 26 mars 2009, Sverre Rabbelier a écrit :
> > >> A 10 patches series with no cover letter?
> > >
> > > I am not a big fan of cover letters. Usually I prefer adding comments
> > > in the patches.
> >
> > I'm sorry I have to say that, but your individual preferences don't
> > matter. Many of us would do things differently, each in their own way,
> > but people adjust to the list's preferences. It's a matter of attitude.
> > So, please...
>
> Actually, a better way to ask for a cover letter would have been to
> convince Christian.  So I'll try that.

Thanks.

As you know, I have been sending patches since nearly 3 years ago to this 
list. And it's only since a few weeks ago that I am asked to send cover 
letters...

> From the patch series' titles (especially when they are cropped due to
> the text window being too small to fit the indented thread), it is not
> all that obvious what you want to achieve with those 10 patches.
>
> From recent discussions, I seem to remember that you wanted to have some
> cute way to mark commits as non-testable during a bisect, and I further
> seem to remember that Junio said that very method should be usable
> outside of bisect, too.

Well, we want to move "git bisect skip" code from shell (in "git-bisect.sh") 
to C. So this patch series does that by creating a new "git bisect--helper" 
command in C that contains the new code and using that new command 
in "git-bisect.sh".

> Unfortunately, that does not reveal to me, quickly, what is the current
> state of affairs, and what you changed since the last time.

Yeah, I should have at least put something in the comment section of my 
first patch in this series.

And I try to improve, you know, I even tried to use "git send-email" again 
this morning to see if perhaps I could use it to send my patch series.

I did:

$ git send-email --compose --dry-run bh15/*
Can't call method "repo_path" on an undefined value 
at /home/christian/libexec/git-core//git-send-email line 160.

and then I gave up, because I don't like spending a lot of my free time to 
fight with tools I don't like.

If someone knows some other tools that can easily send a threaded patch 
series, I will try to see if I can use them...

Thanks in advance,
Christian.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* sending patch sets (was: Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function)
  2009-03-27  0:41         ` Christian Couder
@ 2009-03-27  1:32           ` Julian Phillips
  2009-03-27  7:22             ` Christian Couder
  2009-03-27  2:08           ` [PATCH 01/10] refs: add "for_each_bisect_ref" function Johannes Schindelin
  1 sibling, 1 reply; 12+ messages in thread
From: Julian Phillips @ 2009-03-27  1:32 UTC (permalink / raw)
  To: Christian Couder
  Cc: Johannes Schindelin, Michael J Gruber, Sverre Rabbelier,
	Junio C Hamano, git, John Tapsell

[-- Attachment #1: Type: TEXT/PLAIN, Size: 806 bytes --]

On Fri, 27 Mar 2009, Christian Couder wrote:

> If someone knows some other tools that can easily send a threaded patch
> series, I will try to see if I can use them...

I long ago gave up on send-email, as it seemed to cumbersome for what I 
wanted, and my perl had got so rusty I really couldn't face trying to 
improve it.

So I wrote a replacement in Python (attached), which I have subsequently 
used for all patches I've sent.  It calls format-patch, passing through 
arguments (and you can use -- to let it pass options too).

(the only setting it reads from git config atm is mail-commit.to)

I find it much easier to use than send-email, but as usual YMMV ...

-- 
Julian

  ---
Have you seen the latest Japanese camera?  Apparently it is so fast it can
photograph an American with his mouth shut!

[-- Attachment #2: git-mail-commits --]
[-- Type: TEXT/PLAIN, Size: 11904 bytes --]

#!/usr/bin/python

import optparse
import os
import random
import re
import smtplib
import socket
import sys
import tempfile
import time

from cStringIO import StringIO
from email.Generator import Generator
from email.Message import Message
from email.Parser import FeedParser, Parser
from email.Utils import parseaddr, parsedate, formatdate, \
                        getaddresses, formataddr

my_version = "0.1"
my_name = "git-mail-commits"
this_script = "%s v%s" % (my_name, my_version)

gci_re = re.compile("^(?P<email>(.*) <(.*)>) (\d+ [+-]\d{4})$")

smtp_server = "neutron"

# -----------------------------------------------------------------------------
def get_message_text(message):
    text_msg = StringIO()
    gen = Generator(text_msg, mangle_from_=False)
    gen.flatten(message)
    return text_msg.getvalue()
# -----------------------------------------------------------------------------

# -----------------------------------------------------------------------------
def send_message(msg):
    sent = (None, 'No destination address given')

    (a, fromaddr) = parseaddr(msg.get('From'))
    toaddr_list = msg.get_all('To', [])
    ccaddr_list = msg.get_all('CC', [])
    bccaddr_list = msg.get_all('BCC', [])
    all_recips = getaddresses(toaddr_list + ccaddr_list + bccaddr_list)
    to_list = [ email for (name, email) in all_recips ]

    if len(to_list) > 0:
        server = smtplib.SMTP(smtp_server)
        try:
            errors = server.sendmail(fromaddr, to_list, get_message_text(msg))
            sent = (errors, "Failed to send to one or more recipients")
        except smtplib.SMTPRecipientsRefused, rr:
            sent = (rr.recipients, "Failed to send to all recipients")
        server.quit()

    return sent
# -----------------------------------------------------------------------------

# -----------------------------------------------------------------------------
def get_msgid(idstring=None, idhost=socket.getfqdn(), email=None):
    """Returns a string suitable for RFC 2822 compliant Message-ID, e.g:

    <20020201195627.33539.96671@nightshade.la.mastaler.com>

    Optional idstring if given is a string used to strengthen the
    uniqueness of the message id.

    Based on email.Utils.make_msgid
    """
    timeval = time.time()
    utcdate = time.strftime('%Y%m%d%H%M%S', time.gmtime(timeval))
    pid = os.getpid()
    randint = random.randrange(100000)
    if email is not None:
        ids = ".%s" % (email)
    else:
        if idstring is None:
            idstring = ''
        else:
            idstring = '.' + idstring
        ids = "%s@%s" % (idstring, idhost)
    msgid = '<%s.%s.%s%s>' % (utcdate, pid, randint, ids)
    return msgid
# -----------------------------------------------------------------------------

def get_patches(args, numbered=True, signoff=True):
    patches = []
    cur_patch = None
#    print args
    opts = ['-M']
    if numbered:
        opts.append("-n")
    if signoff:
        opts.append("-s")
    fp = os.popen("git format-patch --stdout %s %s" % (' '.join(opts),
                                                       ' '.join(args)))
    for line in fp.readlines():
        if line[:5] == "From ":
            if cur_patch is not None:
                patches.append(cur_patch.close())
            cur_patch = FeedParser()
        cur_patch.feed(line)
    fp.close()
    if cur_patch is not None:
        patches.append(cur_patch.close())
    return patches

def format_patches(patches, to, initial_msg_id=None,
                   addr=None, cc_list=[]):
    refs = []
    if initial_msg_id is not None:
        refs.append(initial_msg_id)
    for patch in patches:
        if addr is not None:
            patch.replace_header("From", addr)
        if len(cc_list) > 0:
            cc = [x.strip() for x in patch.get("CC", "").split(",")]
            if len(cc) == 1 and cc[0] == "":
                cc = cc_list
            else:
                cc.extend(cc_list)
            del patch['CC']
            print cc
            patch.add_header("CC", ",".join(cc))
        subject = patch.get("Subject")
        (name, email) = parseaddr(patch.get("From"))
        sha1 = patch.get_unixfrom()[5:46]
        msg_id = get_msgid(email=email)
        patch.add_header("To", to)
        del patch['Message-Id']
        patch.add_header("Message-Id", msg_id)
        patch.add_header("X-git-sha1", sha1)
        del patch['X-Mailer']
        patch.add_header("X-Mailer", this_script)
        if len(refs) > 0:
            del patch['In-Reply-To']
            del patch['References']
            patch.add_header("In-Reply-To", refs[-1])
            patch.add_header("References", ' '.join(refs))
        refs.append(msg_id)
#        print "%s - %s" %(sha1[0:7], subject)
#        print patch

def get_git_committer_email():
    gv = os.popen("git var GIT_COMMITTER_IDENT")
    gci = gv.readline()
    gv.close()
#    print gci
    gci_m = gci_re.search(gci)
    if gci_m:
        return gci_m.group('email')
    else:
        print "Unable to get/parse GIT_COMMITTER_IDENT"
        sys.exit(-1)

def get_intro_msg(to, frm_addr, count, filename=None):
    if filename is None:
        if 'EDITOR' not in os.environ:
            print "$EDITOR not set, please set."
            sys.exit(-1)
        (fd, fname) = tempfile.mkstemp()
        f = os.fdopen(fd)
        ret = os.system("%s %s" % (os.environ['EDITOR'], fname))
        if not (os.WIFEXITED(ret) and os.WEXITSTATUS(ret) == 0):
            print "Failed to edit intro message."
            sys.exit(-1)
    else:
        f = open(filename)
    slist = []
    blist = []
    cur = slist
    for line in f.readlines():
        if line == "\n":
            cur = blist
            continue
        cur.append(line)
    f.close()
    if filename is None:
        os.remove(fname)
    subject = ''.join(slist).replace('\n', ' ')
    body = ''.join(blist)
    if subject == "":
        print "No subject for intro message, aborting."
        sys.exit(-1)
    msg = Message()
    msg.add_header('From', frm_addr)
    msg.add_header('To', to)
    (name, email) = parseaddr(msg.get("From"))
    msg.add_header('Message-Id', get_msgid(email=email))
    msg.set_payload(body)
    msg.add_header('Subject', "[PATCH 0/%d] %s" % (count, subject))
    msg.add_header("X-Mailer", this_script)
    return msg

def reply_to(fname):
    p = Parser()
    f = open(fname)
    msg = p.parse(f)
    f.close()
    cc = [x.strip() for x in msg['CC'].split(',')]
    return (msg['From'], msg['Message-ID'], cc)

def main():
    description = "send the given commits as patch emails to the specified " \
                  "address, all non-option arguments are passed to " \
                  "git-format-patch (\"--\" can be used to indicate the end " \
                  "of the options for this script)."
    
    parser = optparse.OptionParser(description=description)
    parser.disable_interspersed_args()

    parser.add_option("", "--to", action="store", default=None,
                      help="the address to send the mails to")

    parser.add_option("", "--cc", action="append", default=[],
                      help="copy the mails to this address")

    parser.add_option("", "--reply-to", action="store", default=None,
                      help="reply to the given mail (rather than use an intro)")

    parser.add_option("-n", "--numbered", action="store_true", default=False,
                      help="send numbered patches (adds -n to the "
                      "git-format-patch options)")

    parser.add_option("-f", "--from", dest="frm_addr", action="store",
                      default=None,
                      help="set FROM as the from address, otherwise use "
                      "GIT_COMMITTER_IDENT")

    parser.add_option("-i", "--intro", dest="intro", action="store_true",
                      help="start with a 0/n intro message using $EDITOR to "
                      "write the message (implies -n).")
    parser.add_option("-I", "--intro-file", dest="intro", action="store",
                      help="start with a 0/n intro message read from INTRO "
                      "(implies -n).")
    parser.set_defaults(intro=None)

    parser.add_option("-e", "--edit", action="store_true", default=False,
                      help="edit the patches before sending")

    parser.add_option("-S", "--no-signoff", dest="signoff",
                      action="store_false", default=True,
                      help="Don't signoff the patches")

    (options, args) = parser.parse_args()

    if len(args) < 1:
        print "You must specify at least one commit to send ..."
        sys.exit(-1)

    if options.to is None:
        gc = os.popen("git config mail-commits.to")
        to = gc.read()
        gc.close()
        if to == "":
            print "you must specify the destination using --to"
            sys.exit(-1)
        else:
            options.to = to.strip()

    print "Sending to: %s\n" % options.to

    if options.frm_addr is not None:
        frm_addr = options.frm_addr
    else:        
        frm_addr = get_git_committer_email()

    if options.intro is not None:
        options.numbered = True

    patches = get_patches(args, options.numbered, signoff=options.signoff)

    intro_msg = None
    intro_msg_id = None
    if options.intro is not None:
        fname = None
        if options.intro is not True:
            fname = options.intro
        intro_msg = get_intro_msg(options.to, frm_addr, len(patches),
                                  filename=fname)
        intro_msg_id = intro_msg.get('Message-Id')

    if options.reply_to is not None:
        (options.to, intro_msg_id, cc) = reply_to(options.reply_to)
        options.cc.extend(cc)

#    print intro_msg

    format_patches(patches, to=options.to, cc_list=options.cc,
                   initial_msg_id=intro_msg_id,
                   addr=frm_addr)

    if options.edit:
        new_patches = []
        for patch in patches:
            (fd, fname) = tempfile.mkstemp()
            f = os.fdopen(fd, "w+")
            f.write(get_message_text(patch))
            f.close()
            if 'EDITOR' not in os.environ:
                print "$EDITOR not set, please set."
                sys.exit(-1)
            ret = os.system("%s %s" % (os.environ['EDITOR'], fname))
            if not (os.WIFEXITED(ret) and os.WEXITSTATUS(ret) == 0):
                print "Failed to edit patch (%d)." % ret
                sys.exit(-1)
            p = FeedParser()
            f = open(fname)
            for line in f:
                p.feed(line)
            m = p.close()
            if m:
                new_patches.append(m)
            f.close()
            os.remove(fname)
        patches = new_patches

    if intro_msg:
        print intro_msg['Subject']
    for patch in patches:
        print patch['Subject']
    print
    print "Press [Enter] to send patches, Ctrl-C to cancel."
    try:
        raw_input()
    except KeyboardInterrupt:
        print "Not sending patches."
        sys.exit(-1)

    print "Sending patches ...\n"

    msgs=[intro_msg]
    msgs.extend(patches)
    for msg in msgs:
        if msg is None:
            continue
        (errors, errmsg) = send_message(msg)
        if len(errors) == 0:
            print "sent %s" % msg['Subject']
        else:
            print "error sending %s" % msg['Subject']
            for (name, (ecode, emsg)) in errors.items():
                print "  %s: %s %s" % (name, ecode, emsg)

if __name__ == "__main__":
    main()

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function
  2009-03-27  0:41         ` Christian Couder
  2009-03-27  1:32           ` sending patch sets (was: Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function) Julian Phillips
@ 2009-03-27  2:08           ` Johannes Schindelin
  2009-03-27  7:21             ` Christian Couder
  1 sibling, 1 reply; 12+ messages in thread
From: Johannes Schindelin @ 2009-03-27  2:08 UTC (permalink / raw)
  To: Christian Couder
  Cc: Michael J Gruber, Sverre Rabbelier, Junio C Hamano, git,
	John Tapsell

[-- Attachment #1: Type: TEXT/PLAIN, Size: 2615 bytes --]

Hi,

On Fri, 27 Mar 2009, Christian Couder wrote:

> Le jeudi 26 mars 2009, Johannes Schindelin a écrit :
>
> > On Thu, 26 Mar 2009, Michael J Gruber wrote:
> > > Christian Couder venit, vidit, dixit 26.03.2009 08:48:
> > > > Le jeudi 26 mars 2009, Sverre Rabbelier a écrit :
> > > >> A 10 patches series with no cover letter?
> > > >
> > > > I am not a big fan of cover letters. Usually I prefer adding 
> > > > comments in the patches.
> > >
> > > I'm sorry I have to say that, but your individual preferences don't 
> > > matter. Many of us would do things differently, each in their own 
> > > way, but people adjust to the list's preferences. It's a matter of 
> > > attitude. So, please...
> >
> > Actually, a better way to ask for a cover letter would have been to 
> > convince Christian.  So I'll try that.
> 
> Thanks.
> 
> As you know, I have been sending patches since nearly 3 years ago to 
> this list. And it's only since a few weeks ago that I am asked to send 
> cover letters...

Heh, I have the feeling that your patch series were much shorter, and did 
not have many revisions, until a few weeks ago ;-)

> > From the patch series' titles (especially when they are cropped due to 
> > the text window being too small to fit the indented thread), it is not 
> > all that obvious what you want to achieve with those 10 patches.
> >
> > From recent discussions, I seem to remember that you wanted to have 
> > some cute way to mark commits as non-testable during a bisect, and I 
> > further seem to remember that Junio said that very method should be 
> > usable outside of bisect, too.
> 
> Well, we want to move "git bisect skip" code from shell (in 
> "git-bisect.sh") to C. So this patch series does that by creating a new 
> "git bisect--helper" command in C that contains the new code and using 
> that new command in "git-bisect.sh".

Oh?  I _completely_ missed that.  And that's being one of the original 
Cc:ed persons...

> > Unfortunately, that does not reveal to me, quickly, what is the 
> > current state of affairs, and what you changed since the last time.
> 
> Yeah, I should have at least put something in the comment section of my 
> first patch in this series.

No.  I would still have missed it.

The cover letter is outside of any patch, because it describes the purpose 
of the _whole_ patch series, not just one patch.

So, it would have been nice to get a heads-up that this is not your 
bisect-skip-a-whole-bunch-of-commits series, but a new animal.

This way, I decided I do not have time for something I do not need, and 
deleted it without having a look.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function
  2009-03-27  2:08           ` [PATCH 01/10] refs: add "for_each_bisect_ref" function Johannes Schindelin
@ 2009-03-27  7:21             ` Christian Couder
  0 siblings, 0 replies; 12+ messages in thread
From: Christian Couder @ 2009-03-27  7:21 UTC (permalink / raw)
  To: Johannes Schindelin
  Cc: Michael J Gruber, Sverre Rabbelier, Junio C Hamano, git,
	John Tapsell

Le vendredi 27 mars 2009, Johannes Schindelin a écrit :
> Hi,
>
> On Fri, 27 Mar 2009, Christian Couder wrote:
> > Le jeudi 26 mars 2009, Johannes Schindelin a écrit :
> > > On Thu, 26 Mar 2009, Michael J Gruber wrote:
> > > > Christian Couder venit, vidit, dixit 26.03.2009 08:48:
> > > > > Le jeudi 26 mars 2009, Sverre Rabbelier a écrit :
> > > > >> A 10 patches series with no cover letter?
> > > > >
> > > > > I am not a big fan of cover letters. Usually I prefer adding
> > > > > comments in the patches.
> > > >
> > > > I'm sorry I have to say that, but your individual preferences don't
> > > > matter. Many of us would do things differently, each in their own
> > > > way, but people adjust to the list's preferences. It's a matter of
> > > > attitude. So, please...
> > >
> > > Actually, a better way to ask for a cover letter would have been to
> > > convince Christian.  So I'll try that.
> >
> > Thanks.
> >
> > As you know, I have been sending patches since nearly 3 years ago to
> > this list. And it's only since a few weeks ago that I am asked to send
> > cover letters...
>
> Heh, I have the feeling that your patch series were much shorter, and did
> not have many revisions, until a few weeks ago ;-)

Please try to look for a 9 patch long series that you reviewed around 
october 2007 with "dunno" or "skip" in the title ;-)

> > > From the patch series' titles (especially when they are cropped due
> > > to the text window being too small to fit the indented thread), it is
> > > not all that obvious what you want to achieve with those 10 patches.
> > >
> > > From recent discussions, I seem to remember that you wanted to have
> > > some cute way to mark commits as non-testable during a bisect, and I
> > > further seem to remember that Junio said that very method should be
> > > usable outside of bisect, too.
> >
> > Well, we want to move "git bisect skip" code from shell (in
> > "git-bisect.sh") to C. So this patch series does that by creating a new
> > "git bisect--helper" command in C that contains the new code and using
> > that new command in "git-bisect.sh".
>
> Oh?  I _completely_ missed that.  And that's being one of the original
> Cc:ed persons...
>
> > > Unfortunately, that does not reveal to me, quickly, what is the
> > > current state of affairs, and what you changed since the last time.
> >
> > Yeah, I should have at least put something in the comment section of my
> > first patch in this series.
>
> No.  I would still have missed it.
>
> The cover letter is outside of any patch, because it describes the
> purpose of the _whole_ patch series, not just one patch.
>
> So, it would have been nice to get a heads-up that this is not your
> bisect-skip-a-whole-bunch-of-commits series, but a new animal.
>
> This way, I decided I do not have time for something I do not need, and
> deleted it without having a look.

Well as I said in my previous email I am willing to improve. So perhaps next 
time.

Best regards,
Christian.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: sending patch sets (was: Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function)
  2009-03-27  1:32           ` sending patch sets (was: Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function) Julian Phillips
@ 2009-03-27  7:22             ` Christian Couder
  0 siblings, 0 replies; 12+ messages in thread
From: Christian Couder @ 2009-03-27  7:22 UTC (permalink / raw)
  To: Julian Phillips
  Cc: Johannes Schindelin, Michael J Gruber, Sverre Rabbelier,
	Junio C Hamano, git, John Tapsell

Le vendredi 27 mars 2009, Julian Phillips a écrit :
> On Fri, 27 Mar 2009, Christian Couder wrote:
> > If someone knows some other tools that can easily send a threaded patch
> > series, I will try to see if I can use them...
>
> I long ago gave up on send-email, as it seemed to cumbersome for what I
> wanted, and my perl had got so rusty I really couldn't face trying to
> improve it.
>
> So I wrote a replacement in Python (attached), which I have subsequently
> used for all patches I've sent.  It calls format-patch, passing through
> arguments (and you can use -- to let it pass options too).
>
> (the only setting it reads from git config atm is mail-commit.to)
>
> I find it much easier to use than send-email, but as usual YMMV ...

Thanks I will try to have a look at it,
Christian.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2009-03-27  7:24 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-26  4:55 [PATCH 01/10] refs: add "for_each_bisect_ref" function Christian Couder
2009-03-26  6:20 ` Sverre Rabbelier
2009-03-26  7:48   ` Christian Couder
2009-03-26 12:37     ` Sverre Rabbelier
2009-03-26 15:50     ` Michael J Gruber
2009-03-26 16:52       ` Johannes Schindelin
2009-03-26 16:54         ` Sverre Rabbelier
2009-03-27  0:41         ` Christian Couder
2009-03-27  1:32           ` sending patch sets (was: Re: [PATCH 01/10] refs: add "for_each_bisect_ref" function) Julian Phillips
2009-03-27  7:22             ` Christian Couder
2009-03-27  2:08           ` [PATCH 01/10] refs: add "for_each_bisect_ref" function Johannes Schindelin
2009-03-27  7:21             ` Christian Couder

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).