Browse Source
* eb/quilt: Implement a --dry-run option to git-quiltimport Implement git-quiltimportmaint
Junio C Hamano
19 years ago
3 changed files with 180 additions and 1 deletions
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
git-quiltimport(1) |
||||
================ |
||||
|
||||
NAME |
||||
---- |
||||
git-quiltimport - Applies a quilt patchset onto the current branch |
||||
|
||||
|
||||
SYNOPSIS |
||||
-------- |
||||
[verse] |
||||
'git-quiltimport' [--dry-run] [--author <author>] [--patches <dir>] |
||||
|
||||
|
||||
DESCRIPTION |
||||
----------- |
||||
Applies a quilt patchset onto the current git branch, preserving |
||||
the patch boundaries, patch order, and patch descriptions present |
||||
in the quilt patchset. |
||||
|
||||
For each patch the code attempts to extract the author from the |
||||
patch description. If that fails it falls back to the author |
||||
specified with --author. If the --author flag was not given |
||||
the patch description is displayed and the user is asked to |
||||
interactively enter the author of the patch. |
||||
|
||||
If a subject is not found in the patch description the patch name is |
||||
preserved as the 1 line subject in the git description. |
||||
|
||||
OPTIONS |
||||
------- |
||||
--dry-run:: |
||||
Walk through the patches in the series and warn |
||||
if we cannot find all of the necessary information to commit |
||||
a patch. At the time of this writing only missing author |
||||
information is warned about. |
||||
|
||||
--author Author Name <Author Email>:: |
||||
The author name and email address to use when no author |
||||
information can be found in the patch description. |
||||
|
||||
--patches <dir>:: |
||||
The directory to find the quilt patches and the |
||||
quilt series file. |
||||
|
||||
The default for the patch directory is patches |
||||
or the value of the $QUILT_PATCHES environment |
||||
variable. |
||||
|
||||
Author |
||||
------ |
||||
Written by Eric Biederman <ebiederm@lnxi.com> |
||||
|
||||
Documentation |
||||
-------------- |
||||
Documentation by Eric Biederman <ebiederm@lnxi.com> |
||||
|
||||
GIT |
||||
--- |
||||
Part of the gitlink:git[7] suite |
||||
|
@ -0,0 +1,118 @@
@@ -0,0 +1,118 @@
|
||||
#!/bin/sh |
||||
USAGE='--dry-run --author <author> --patches </path/to/quilt/patch/directory>' |
||||
SUBDIRECTORY_ON=Yes |
||||
. git-sh-setup |
||||
|
||||
dry_run="" |
||||
quilt_author="" |
||||
while case "$#" in 0) break;; esac |
||||
do |
||||
case "$1" in |
||||
--au=*|--aut=*|--auth=*|--autho=*|--author=*) |
||||
quilt_author=$(expr "$1" : '-[^=]*\(.*\)') |
||||
shift |
||||
;; |
||||
|
||||
--au|--aut|--auth|--autho|--author) |
||||
case "$#" in 1) usage ;; esac |
||||
shift |
||||
quilt_author="$1" |
||||
shift |
||||
;; |
||||
|
||||
--dry-run) |
||||
shift |
||||
dry_run=1 |
||||
;; |
||||
|
||||
--pa=*|--pat=*|--patc=*|--patch=*|--patche=*|--patches=*) |
||||
QUILT_PATCHES=$(expr "$1" : '-[^=]*\(.*\)') |
||||
shift |
||||
;; |
||||
|
||||
--pa|--pat|--patc|--patch|--patche|--patches) |
||||
case "$#" in 1) usage ;; esac |
||||
shift |
||||
QUILT_PATCHES="$1" |
||||
shift |
||||
;; |
||||
|
||||
*) |
||||
break |
||||
;; |
||||
esac |
||||
done |
||||
|
||||
# Quilt Author |
||||
if [ -n "$quilt_author" ] ; then |
||||
quilt_author_name=$(expr "z$quilt_author" : 'z\(.*[^ ]\) *<.*') && |
||||
quilt_author_email=$(expr "z$quilt_author" : '.*<\([^>]*\)') && |
||||
test '' != "$quilt_author_name" && |
||||
test '' != "$quilt_author_email" || |
||||
die "malformatted --author parameter" |
||||
fi |
||||
|
||||
# Quilt patch directory |
||||
: ${QUILT_PATCHES:=patches} |
||||
if ! [ -d "$QUILT_PATCHES" ] ; then |
||||
echo "The \"$QUILT_PATCHES\" directory does not exist." |
||||
exit 1 |
||||
fi |
||||
|
||||
# Temporay directories |
||||
tmp_dir=.dotest |
||||
tmp_msg="$tmp_dir/msg" |
||||
tmp_patch="$tmp_dir/patch" |
||||
tmp_info="$tmp_dir/info" |
||||
|
||||
|
||||
# Find the intial commit |
||||
commit=$(git-rev-parse HEAD) |
||||
|
||||
mkdir $tmp_dir || exit 2 |
||||
for patch_name in $(cat "$QUILT_PATCHES/series" | grep -v '^#'); do |
||||
echo $patch_name |
||||
(cat $QUILT_PATCHES/$patch_name | git-mailinfo "$tmp_msg" "$tmp_patch" > "$tmp_info") || exit 3 |
||||
|
||||
# Parse the author information |
||||
export GIT_AUTHOR_NAME=$(sed -ne 's/Author: //p' "$tmp_info") |
||||
export GIT_AUTHOR_EMAIL=$(sed -ne 's/Email: //p' "$tmp_info") |
||||
while test -z "$GIT_AUTHOR_EMAIL" && test -z "$GIT_AUTHOR_NAME" ; do |
||||
if [ -n "$quilt_author" ] ; then |
||||
GIT_AUTHOR_NAME="$quilt_author_name"; |
||||
GIT_AUTHOR_EMAIL="$quilt_author_email"; |
||||
elif [ -n "$dry_run" ]; then |
||||
echo "No author found in $patch_name" >&2; |
||||
GIT_AUTHOR_NAME="dry-run-not-found"; |
||||
GIT_AUTHOR_EMAIL="dry-run-not-found"; |
||||
else |
||||
echo "No author found in $patch_name" >&2; |
||||
echo "---" |
||||
cat $tmp_msg |
||||
echo -n "Author: "; |
||||
read patch_author |
||||
|
||||
echo "$patch_author" |
||||
|
||||
patch_author_name=$(expr "z$patch_author" : 'z\(.*[^ ]\) *<.*') && |
||||
patch_author_email=$(expr "z$patch_author" : '.*<\([^>]*\)') && |
||||
test '' != "$patch_author_name" && |
||||
test '' != "$patch_author_email" && |
||||
GIT_AUTHOR_NAME="$patch_author_name" && |
||||
GIT_AUTHOR_EMAIL="$patch_author_email" |
||||
fi |
||||
done |
||||
export GIT_AUTHOR_DATE=$(sed -ne 's/Date: //p' "$tmp_info") |
||||
export SUBJECT=$(sed -ne 's/Subject: //p' "$tmp_info") |
||||
if [ -z "$SUBJECT" ] ; then |
||||
SUBJECT=$(echo $patch_name | sed -e 's/.patch$//') |
||||
fi |
||||
|
||||
if [ -z "$dry_run" ] ; then |
||||
git-apply --index -C1 "$tmp_patch" && |
||||
tree=$(git-write-tree) && |
||||
commit=$((echo "$SUBJECT"; echo; cat "$tmp_msg") | git-commit-tree $tree -p $commit) && |
||||
git-update-ref HEAD $commit || exit 4 |
||||
fi |
||||
done |
||||
rm -rf $tmp_dir || exit 5 |
Loading…
Reference in new issue