git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: James Nylen <jnylen@gmail.com>
To: git@vger.kernel.org
Subject: Re: [PATCH] Add --unannotate option to git-subtree
Date: Tue, 16 Oct 2012 08:47:09 -0400	[thread overview]
Message-ID: <CABVa4NgdaiwfTvFe1CU+24QF-BA45tM2e3+9e2PJ_4ecuD0Cyg@mail.gmail.com> (raw)
In-Reply-To: <CABVa4NinSighUn7GKbzMx9qZj3Ao2dCtEZxUqCPwO9TocZ8Kkg@mail.gmail.com>

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.

> 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

  reply	other threads:[~2012-10-16 12:47 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 [this message]
2012-10-20 19:33   ` Herman van Rink
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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=CABVa4NgdaiwfTvFe1CU+24QF-BA45tM2e3+9e2PJ_4ecuD0Cyg@mail.gmail.com \
    --to=jnylen@gmail.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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).