Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Timothe Litt
BIND
Commits
92e80317
Commit
92e80317
authored
Mar 18, 2013
by
Evan Hunt
Browse files
[master] add branchsync to util
Script to sync release branch to subscription branch.
parent
625ee5d0
Changes
2
Hide whitespace changes
Inline
Side-by-side
util/branchsync.sh
0 → 100644
View file @
92e80317
#!/bin/sh
# branchsync:
# pull in changes from a main BIND 9 release branch to a subscription
# branch (e.g., from v9_9 to v9_9_sub). This excludes commits from the
# 'tinderbox' user (copyright updates and doc regeneration) because those
# will be taken care of in the subscription branch itself.
#
# Most of the time, changes in the main branch will cherry-pick cleanly
# into the subscription branch. When one fails, we reset to the last
# commit that went cleanly, and send mail -- or, if running in interactive
# mode, we stop and allow the user to resolve conflicts.
#
# Usage:
# branchsync.sh [ -i ] [ -c ]
# -i: interactive mode (don't reset and send mail)
# -c: continue (conflicts are resolved; edit message and commit)
savehash
()
{
cat
<<
EOF
>
$1
.new
SOURCEBRANCH=
$2
LASTHASH=
$3
EOF
mv
-f
$1
.new
$1
git add branchsync.dat
}
thisbranch
()
{
git branch |
grep
'^\*'
|
cut
-b3-
}
docommit
()
{
git log
-1
--pretty
=
format:%s%n%b
$2
>
orig_commit_msg.tmp
firstline
=
`
head
-1
orig_commit_msg.tmp |
sed
's/^\[[a-z0-9_]*\] //'
`
tail
-n
+2 orig_commit_msg.tmp
>
remainder.tmp
firstline
=
"[
$BRANCH
]
$firstline
"
echo
$firstline
>
commit_msg.tmp
cat
remainder.tmp
>>
commit_msg.tmp
echo
"pulled from
$1
by script."
>>
commit_msg.tmp
echo
"hash:
$2
"
>>
commit_msg.tmp
msg
=
`
cat
commit_msg.tmp
`
rm
-f
orig_commit_msg.tmp commit_msg.tmp remainder.tmp
git commit
--no-verify
--no-edit
-m
"
$msg
"
||
exit
1
}
BRANCH
=
`
thisbranch
`
.
branchsync.dat
# check arguments
interactive
=
continuing
=
case
$1
in
'-i'
)
interactive
=
yes
;;
'-c'
)
docommit
$SOURCEBRANCH
$LASTHASH
interactive
=
yes
continuing
=
yes
;;
*
)
if
[
$#
-ne
0
]
;
then
echo
"Usage:
$0
[ -i ] [ -c ]"
1>&2
exit
1
fi
;;
esac
if
[
-z
"
$continuing
"
]
;
then
status
=
`
git status
-suno
`
if
[
-n
"
$status
"
]
;
then
echo
"Work tree is not clean. Clean up, or run with -c:"
echo
"
$status
"
exit
1
fi
# make sure both branches are synced to the source repository
git pull origin
$BRANCH
git checkout
-f
$SOURCEBRANCH
git pull origin
$SOURCEBRANCH
git checkout
-f
$BRANCH
fi
# loop through commits looking for ones that should be cherry-picked
git log
$SOURCEBRANCH
--reverse
--format
=
'%H %aN'
$LASTHASH
..
$SOURCEBRANCH
|
\
grep
-v
Tinderbox |
cut
-d
' '
-f1
|
{
while
read hash
;
do
if
git cherry-pick
-xn
${
hash
}
;
then
# cherry-pick was clean
# restore the copyrights file
git checkout HEAD
--
util/copyrights
# note which hash we've merged
savehash branchsync.dat
$SOURCEBRANCH
$hash
# fix the commit message, and commit
docommit
$SOURCEBRANCH
$hash
# move on to the next commit
continue
elif
[
-n
"
$interactive
"
]
;
then
# interactive mode -- wait for user to fix things
git checkout HEAD
--
util/copyrights
# note which hash we've merged
savehash branchsync.dat
$SOURCEBRANCH
$hash
else
# noninteractive mode
# reset everything
git reset
--hard
# build mail message
MESSAGE
=
"Attempt to cherry pick
${
hash
}
\n
to
$BRANCH
failed."
MESSAGE
=
$MESSAGE
"
\n
Commit message of change was:
\n
"
MESSAGE
=
$MESSAGE
"
`
git log
-1
--pretty
=
format:%s%n%b
${
hash
}
`
"
subject
=
"Branch sync to
$BRANCH
failed"
# send mail
echo
"
$MESSAGE
"
| mail
-s
"
$subject
"
bind-changes
fi
break
done
}
util/kit.sh
View file @
92e80317
...
...
@@ -158,6 +158,9 @@ find util -depth -type d -print | xargs rmdir 2>/dev/null
# Remove all .gitignore files
find
.
-name
.gitignore
-print
| xargs
rm
# Remove branchsync.dat, if present
rm
-f
branchsync.dat
# populate srcid file
echo
"SRCID=
$shorthash
"
>
srcid
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment