mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
Merge branch 'eb/quilt'
* eb/quilt: Implement a --dry-run option to git-quiltimport Implement git-quiltimport
This commit is contained in:
commit
667661d46e
61
Documentation/git-quiltimport.txt
Normal file
61
Documentation/git-quiltimport.txt
Normal file
|
@ -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
|
||||
|
2
Makefile
2
Makefile
|
@ -125,7 +125,7 @@ SCRIPT_SH = \
|
|||
git-applymbox.sh git-applypatch.sh git-am.sh \
|
||||
git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
|
||||
git-merge-resolve.sh git-merge-ours.sh \
|
||||
git-lost-found.sh
|
||||
git-lost-found.sh git-quiltimport.sh
|
||||
|
||||
SCRIPT_PERL = \
|
||||
git-archimport.perl git-cvsimport.perl git-relink.perl \
|
||||
|
|
118
git-quiltimport.sh
Executable file
118
git-quiltimport.sh
Executable file
|
@ -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 a new issue