From: Herman van Rink <rink@initfour.nl>
To: James Nylen <jnylen@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] Add --unannotate option to git-subtree
Date: Sat, 20 Oct 2012 21:33:06 +0200 [thread overview]
Message-ID: <5082FC72.4000608@initfour.nl> (raw)
In-Reply-To: <CABVa4NgdaiwfTvFe1CU+24QF-BA45tM2e3+9e2PJ_4ecuD0Cyg@mail.gmail.com>
On 10/16/2012 02:47 PM, James Nylen wrote:
> On Tue, Oct 9, 2012 at 4:26 PM, James Nylen <jnylen@gmail.com> wrote:
>> This new option does the reverse of --annotate, which is more useful
>> when contributing back to a library which is also included in the
>> repository for a larger project, and perhaps in other situations as
>> well.
>>
>> Rather than adding a marker to each commit when splitting out the
>> commits back to the subproject, --unannotate removes the specified
>> string (or bash glob pattern) from the beginning of the first line of
>> the commit message. This enables the following workflow:
>>
>> - Commit to a library included in a large project, with message:
>> Library: Make some amazing change
>>
>> - Use `git-subtree split` to send this change to the library maintainer
>>
>> - Pass ` --unannotate='Library: ' ` or ` --unannotate='*: ' `
>>
>> - This will turn the commit message for the library project into:
>> Make some amazing change
>>
>> This helps to keep the commit messages meaningful in both the large
>> project and the library project.
>>
>> Signed-off-by: James Nylen <jnylen@gmail.com>
>> ---
> Has anybody looked at this?
>
> It has been very useful for me.
The version of subtree in contrib is rather out-dated unfortunately.
Your patch looks interesting though. I can see how this could be useful.
I've collected a bunch of patches in
https://github.com/helmo/git/tree/subtree-updates
Apart from a line in git-subtree.txt ending in whitespace I think I can
merge it in there.
>
>> Let me know if gmail has munged this patch. You can also get at it
>> like this:
>>
>> $ git remote add nylen git://github.com/nylen/git.git
>> $ git fetch nylen
>> $ git show nylen/subtree-unannotate
>> ---
>> contrib/subtree/git-subtree.sh | 11 +++++++++--
>> contrib/subtree/git-subtree.txt | 15 +++++++++++++++
>> 2 files changed, 24 insertions(+), 2 deletions(-)
>>
>> diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
>> index 920c664..8d1ed05 100755
>> --- a/contrib/subtree/git-subtree.sh
>> +++ b/contrib/subtree/git-subtree.sh
>> @@ -21,6 +21,7 @@ P,prefix= the name of the subdir to split out
>> m,message= use the given message as the commit message for the merge commit
>> options for 'split'
>> annotate= add a prefix to commit message of new commits
>> +unannotate= remove a prefix from new commit messages (supports bash globbing)
>> b,branch= create a new branch from the split subtree
>> ignore-joins ignore prior --rejoin commits
>> onto= try connecting new tree to an existing one
>> @@ -43,6 +44,7 @@ onto=
>> rejoin=
>> ignore_joins=
>> annotate=
>> +unannotate=
>> squash=
>> message=
>>
>> @@ -80,6 +82,8 @@ while [ $# -gt 0 ]; do
>> -d) debug=1 ;;
>> --annotate) annotate="$1"; shift ;;
>> --no-annotate) annotate= ;;
>> + --unannotate) unannotate="$1"; shift ;;
>> + --no-unannotate) unannotate= ;;
>> -b) branch="$1"; shift ;;
>> -P) prefix="$1"; shift ;;
>> -m) message="$1"; shift ;;
>> @@ -310,8 +314,11 @@ copy_commit()
>> GIT_COMMITTER_NAME \
>> GIT_COMMITTER_EMAIL \
>> GIT_COMMITTER_DATE
>> - (echo -n "$annotate"; cat ) |
>> - git commit-tree "$2" $3 # reads the rest of stdin
>> + (
>> + read FIRST_LINE
>> + echo "$annotate${FIRST_LINE#$unannotate}"
>> + cat # reads the rest of stdin
>> + ) | git commit-tree "$2" $3
>> ) || die "Can't copy commit $1"
>> }
>>
>> diff --git a/contrib/subtree/git-subtree.txt b/contrib/subtree/git-subtree.txt
>> index 0c44fda..ae420aa 100644
>> --- a/contrib/subtree/git-subtree.txt
>> +++ b/contrib/subtree/git-subtree.txt
>> @@ -198,6 +198,21 @@ OPTIONS FOR split
>> git subtree tries to make it work anyway, particularly
>> if you use --rejoin, but it may not always be effective.
>>
>> +--unannotate=<annotation>::
>> + This option is only valid for the split command.
>> +
>> + When generating synthetic history, try to remove the prefix
>> + <annotation> from each commit message (using bash's "strip
>> + shortest match from beginning" command, which supports
>> + globbing). This makes sense if you format library commits
>> + like "library: Change something or other" when you're working
>> + in your project's repository, but you want to remove this
>> + prefix when pushing back to the library's upstream repository.
>> + (In this case --unannotate='*: ' would work well.)
>> +
>> + Like --annotate, you need to use the same <annotation>
>> + whenever you split, or you may run into problems.
>> +
>> -b <branch>::
>> --branch=<branch>::
>> This option is only valid for the split command.
>> --
>> 1.7.11.3
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
Met vriendelijke groet / Regards,
Herman van Rink
Initfour websolutions
next prev parent reply other threads:[~2012-10-20 19:42 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-09 20:26 [PATCH] Add --unannotate option to git-subtree James Nylen
2012-10-16 12:47 ` James Nylen
2012-10-20 19:33 ` Herman van Rink [this message]
2012-12-31 23:19 ` greened
2013-01-01 1:15 ` greened
2013-01-17 20:56 ` James Nylen
2013-01-22 8:41 ` greened
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=5082FC72.4000608@initfour.nl \
--to=rink@initfour.nl \
--cc=git@vger.kernel.org \
--cc=jnylen@gmail.com \
/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.