blob: 88b26f365c0d589566116b6a8168110e1eea7f87 (
plain)
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
|
#!/bin/sh
# Copyright (C) 2017-2020 Miquel Sabaté Solà <mikisabate@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Most of the code is taken from the default pre-push.sample file.
# From the documentation, if the foreign ref does not yet exist the
# <remote SHA1> will be 40 0.
z40=0000000000000000000000000000000000000000
# The path where the files are to be stored on the server.
__mssola_remote_path=/home/mssola/static
# Safely join paths.
__mssola_join_path() {
local IFS="/"; echo "$*";
}
# This function does the actual syncing. It takes one argument, which is the
# file to be synced. Note that this function assumes that the given file is
# under the "emacs" directory.
__mssola_sync_cheato() {
path=$(realpath .)
src=$(__mssola_join_path $path "emacs" $1)
dst=$(__mssola_join_path "cheato.mssola.com:$__mssola_remote_path" $1)
echo "Syncing $(__mssola_join_path emacs $1)"
rsync $src $dst
}
# Copy the files that I want to my server.
__mssola_sync() {
__mssola_sync_cheato "init.html"
}
# This block iterates through all the given info provided by git. If there is
# a change on a GNU Emacs file, then it needs to by synced with my server.
while read local_ref local_sha remote_ref remote_sha
do
if [ "$local_sha" = $z40 ]
then
# Handle delete
:
else
if [ "$remote_sha" = $z40 ]
then
# New branch, examine all commits
range="$local_sha"
else
# Update to existing branch, examine new commits
range="$remote_sha..$local_sha"
fi
# Commits afecting GNU Emacs are prefixed with "emacs: ". It's a
# convention that I always follow.
commit=`git rev-list -n 1 --grep '^emacs:' "$range"`
if [ -n "$commit" ]
then
__mssola_sync
exit 0
fi
fi
done
exit 0
|