47 lines
1.4 KiB
Bash
47 lines
1.4 KiB
Bash
|
#! /bin/sh
|
||
|
#
|
||
|
# Exports changes made to files so that the upstream
|
||
|
# maintainers can import the changes into their own
|
||
|
# git repo. All changes which are not marked as
|
||
|
# being from the remote git repo with a "commit ID"
|
||
|
# comment are exported.
|
||
|
#
|
||
|
# Result are numbered .patch files, as with "git format-patch".
|
||
|
#
|
||
|
# Run this inside the top level of a clean
|
||
|
# syncevolution git repository with the following
|
||
|
# parameters:
|
||
|
# - file system path for foreign git repository
|
||
|
# - a remote directory into which the source file(s) are to be placed,
|
||
|
# preserving all remaining directories after stripping
|
||
|
# - common local directory to be stripped from source file(s)
|
||
|
# - one or more source file names, with paths relative to the
|
||
|
# local repository
|
||
|
|
||
|
set -e
|
||
|
set -x
|
||
|
|
||
|
FOREIGN="$1"
|
||
|
shift
|
||
|
TARGET_DIR="$1"
|
||
|
shift
|
||
|
SOURCE_DIR="$1"
|
||
|
shift
|
||
|
SOURCE="$@"
|
||
|
|
||
|
FOREIGN_NAME=`basename $FOREIGN`
|
||
|
|
||
|
# iterate over commits involving the relevant files,
|
||
|
# starting with oldest one
|
||
|
counter=1
|
||
|
for commit in `(git log --format=format:%H $SOURCE; echo) | perl -e 'print reverse(<>)'`; do
|
||
|
if git log -n 1 $commit | grep -q "$FOREIGN_NAME commit ID"; then
|
||
|
# nothing to do, is in original git repo
|
||
|
true
|
||
|
else
|
||
|
file=`printf %03d $counter`-`git log -n 1 --format=format:%f $commit`.patch
|
||
|
counter=`expr $counter + 1`
|
||
|
git log -n 1 -p --stat --format=email $commit $SOURCE | perl -p -e "s;$SOURCE_DIR;$TARGET_DIR;g;" -e "s/^index [0-9a-f]*\.\.[0-9a-f]* [0-9]*\n$//;" >$file
|
||
|
fi
|
||
|
done
|