blob: 75573c5b63adccfd60bccd6d91dff917cae31985 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#!/bin/bash
set -eux
TARGET_INFO_FILE="$(realpath $1)"
if [ ! -f $TARGET_INFO_FILE ]; then
echo "File $TARGET_INFO_FILE doesn't exist. Creating new one"
if [ "$2" == "" ]; then
echo "Expected source folder as the second argument" >&2
exit
fi
if [ ! -d "$2" ]; then
echo "Expected $2 to be a directory" >&2
exit
fi
FROM=$(realpath $2)
GIT_ROOT=$(cd $FROM; git rev-parse --show-toplevel)
HEAD=$(cd $FROM; git rev-parse HEAD)
# Normalize FROM relativly to the git root
FROM=${FROM#$GIT_ROOT/}
echo "$HEAD;$FROM" > $TARGET_INFO_FILE
echo "Filled in $TARGET_INFO_FILE"
exit
fi
IFS=';' read -r BASE_REV INFO_FROM < "$TARGET_INFO_FILE"
TO=$(dirname $(realpath "$TARGET_INFO_FILE"))
HEAD_REV=$(cd $TO; git rev-parse HEAD)
GIT_ROOT=$(cd $TO; git rev-parse --show-toplevel)
FROM="$GIT_ROOT/$INFO_FROM"
echo "Base revision: $BASE_REV"
echo "Head revision: $HEAD_REV"
echo "Git root: $GIT_ROOT"
echo "Source: $FROM"
echo "Target: $TO"
if [ "$(cd $TO; git status -s -u | wc -l)" != "0" ]; then
echo "Target $TO has uncommited changes" >&2
exit
fi
cd $GIT_ROOT
CURRENT_BRANCH=$(git branch --show-current)
PATCH_FILE=$(mktemp)
BRANCH=upgrade-$(date '+%Y-%m-%d-%H-%M-%S')
clean_up () {
ARG=$?
echo "Deleting patch file"
rm $PATCH_FILE
exit $ARG
}
trap clean_up EXIT
echo "Use $BRANCH temporary branch, $PATCH_FILE patch file"
git checkout -b $BRANCH $BASE_REV
rsync -r --delete --filter='. -' -v $TO/ $FROM << EOF
+ /*/
+ *.md
+ toc_*.yaml
- /*
EOF
git add -A $INFO_FROM
git diff --cached --binary --relative=$INFO_FROM > $PATCH_FILE
git reset --hard
git clean -d -f
git status
git checkout "$CURRENT_BRANCH"
git branch -D $BRANCH
rsync -r --delete --filter='. -' -v $FROM/ $TO << EOF
+ /*/
+ *.md
+ toc_*.yaml
- /*
EOF
patch -d $TO -p1 -N -E --no-backup-if-mismatch --merge -i $PATCH_FILE -t
#git apply --whitespace=nowarn --directory=$TO --reject $PATCH_FILE
echo "$HEAD_REV;$INFO_FROM" > $TARGET_INFO_FILE
|