mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-12 09:36:33 +01:00
98 lines
2.6 KiB
Bash
98 lines
2.6 KiB
Bash
#!/bin/sh
|
|
|
|
# Accepts two argument: the git reference (SHA-1 hash) that
|
|
# corresponds to the current state of the Perforce repository.
|
|
|
|
# Assumption: we are in the folder where the Perforce repository is
|
|
# located and the paths that git will provided, when stripped of one
|
|
# initial folder (e.g. a/b/c/d => b/c/d) will correctly reference
|
|
# the files.
|
|
|
|
if [ $# -lt 2 ] ; then
|
|
echo "usage: $0 SHA-1-describing-perforce /path/to/git/repo"
|
|
exit 1
|
|
fi
|
|
|
|
dry_run="--dry-run"
|
|
|
|
while true ; do
|
|
case $1 in
|
|
-l|--live) dry_run= ; shift ;;
|
|
*) break ;;
|
|
esac
|
|
done
|
|
|
|
# Now check argument list again
|
|
|
|
if [ $# -lt 2 ] ; then
|
|
echo "usage: $0 SHA-1-describing-perforce /path/to/git/repo"
|
|
exit 1
|
|
fi
|
|
|
|
earliest=$1
|
|
gitdir=$2
|
|
|
|
if [ ! -d $gitdir ] ; then
|
|
echo "Git repository $gitdir does not exist or is not a directory"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d $gitdir/.git ] ; then
|
|
echo "Git repository $gitdir does not appear to be a git repository (no .git folder)"
|
|
exit 1
|
|
fi
|
|
|
|
#
|
|
# Let the user know what is about to happen
|
|
#
|
|
|
|
if [ x$dry_run != x ] ; then
|
|
echo "This will be a DRY RUN. No files will be modified. Press enter to continue"
|
|
else
|
|
echo "This will be a live run. Files WILL be modified. Press enter to continue"
|
|
fi
|
|
read
|
|
|
|
#
|
|
# get a list of commits since $earliest (i.e. everything not yet present in the Perforce repo
|
|
#
|
|
|
|
commitlist=`(cd $gitdir && git log --reverse $earliest..HEAD) | grep '^commit' | cut -d' ' -f2`
|
|
|
|
for commit in $commitlist ; do
|
|
printf "Next revision:
|
|
|
|
$(cd $gitdir && git log --pretty=oneline -n 1 $commit).
|
|
|
|
Press enter to try to apply this change:"
|
|
|
|
read
|
|
|
|
while [ true ] ; do
|
|
if (cd $gitdir && git show $commit) | patch -p1 $dry_run ; then
|
|
echo "Completed successfully."
|
|
break;
|
|
else
|
|
echo "Git commit $commit did not apply cleanly."
|
|
printf "Type s to skip, w to wait (while you fix it) or enter to stop this merge: "
|
|
read r
|
|
case $r in
|
|
s|S) break;
|
|
;;
|
|
w|W) printf "OK, type enter when you're ready to continue or anything else to quit: "
|
|
read rr
|
|
if [ x$rr != x ] ; then
|
|
echo "The commit that you stopped before merging was " $commit
|
|
exit 1
|
|
fi
|
|
;;
|
|
*) echo "When you restart, remember to use $commit as the first argument to this script."
|
|
exit 1
|
|
;;
|
|
esac
|
|
fi
|
|
done
|
|
done
|
|
|
|
echo "The Perforce workspace at `pwd` is now current with the git repository at $gitdir"
|
|
exit 0
|