Hello again,

On Thu, Feb 20, 2014 at 10:03:34PM +0100, Uwe Kleine-König wrote:
> I'm playing around with git-notes and want to share some of my notes
> with my co-workers. We have a central repository for our various topic
> branches and want to track upstream inclusion in git-notes. So we have
> to share our notes branch somehow.
> The workflow I think makes sense here is (untested):
>       ### hack hack, add notes bla blub
>       ### -> nice topic branch with some notes
>       git fetch serverrepo refs/notes/commits:refs/notes/servercommits
>       git notes merge refs/notes/servercommits
>       git rev-list origin/master.. | awk '{print $1 " " $1}' | git notes copy 
> --to refs/notes/servercommits --stdin
>       git push serverrepo refs/notes/servercommits:refs/notes/commits
> Then maybe:
>       git notes merge refs/notes/servercommits
> again.
> The idea here is to only include notes in refs/notes/servercommits that
> are relevant for my coworkers and not all intermediate notes that were
> created during development or while working on other branches.
> Does this make sense? Do you have better ideas or suggestions how to
> improve the workflow?
> The only problem now is that git notes copy doesn't take a --to
> parameter. Maybe there is a volunteer to implement it? Then I'd
> volunteer to test it :-)
I have implemented something now to copy notes to another branch. Here
is it for reference:

#! /bin/sh

set -e

. git-sh-setup

# for now the remote notes rev must be a ref below refs/notes
# see id:20140220153045.gi6...@pengutronix.de for the respective plea.
local_notes="$(git notes get-ref)"

remote_notes_ref=$(git rev-parse --verify "$remote_notes^{commit}")

trap "rm \"$tmpfile\"" EXIT

git rev-list "$@" | sed 's/^/100644 blob [0-9a-f]{40}\t/' > $tmpfile

GIT_DIR=$(git rev-parse --git-dir)

GIT_INDEX_FILE="$GIT_DIR/index-rnotes" git read-tree "$remote_notes"
git ls-tree "$local_notes" | grep -E -f "$tmpfile" | 
GIT_INDEX_FILE="$GIT_DIR/index-rnotes" git update-index --index-info

tree=$(GIT_INDEX_FILE="$GIT_DIR/index-rnotes" git write-tree)

if test "x$tree" = "x$(git rev-parse "$remote_notes_ref^{tree}")"; then
        echo "empty commit"
        exit 0

commit=$(git commit-tree "$tree" -p "$remote_notes_ref" << EOF
Notes added by 'git notes-copy'

source notes: $(git rev-parse $local_notes)

git update-ref "$remote_notes" $commit $remote_notes_ref

It still has some edges, but I think it will do for me. Enhancements

Best regards

Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to