summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rwxr-xr-xbin/post-commit49
-rw-r--r--bin/util.rb21
2 files changed, 46 insertions, 24 deletions
diff --git a/bin/post-commit b/bin/post-commit
index 6b72bd2..489181f 100755
--- a/bin/post-commit
+++ b/bin/post-commit
@@ -1,25 +1,38 @@
#!/usr/bin/env bash
+# Copyright 2016-2017 Luke Shumaker
+set -e
-branch=$(git name-rev --name-only HEAD)
-if [[ $branch == master ]]; then
+main() {
+ branch=$(git name-rev --name-only HEAD)
+ if [[ $branch == master ]]; then
+ gitdir="$(git rev-parse --git-dir)"
+ workdir="${gitdir}/pre-generated"
+ exec 8>"${workdir}.lock"
+ flock 8
- stash=false
- if [[ -n "$(git status --porcelain)" ]]; then
- stash=true
- git add .
- git stash
- fi
+ rm -rf -- "$workdir"
+ git worktree prune
+ git branch -D pre-generated.tmp &>/dev/null || true
+
+ git worktree add -b pre-generated.tmp "${gitdir}/pre-generated" master
+ (
+ unset GIT_DIR GIT_WORK_TREE
+ cd "$workdir"
+ msg="$(git log -n1 master --pretty=format:%B)"
- git checkout pre-generated
- git merge master -m 'bogus'
- rm -rf out
- make --always-make -j12
- git add .
- git commit --amend -m "make: $(git log -n1 master --pretty=format:%B)"
- git checkout master
+ make -j1
+ echo '!/out/' >> .gitignore
- if $stash; then
- git stash pop
+ git add .
+ git commit -m "make: $msg"
+ git merge --no-edit -s ours pre-generated
+ git checkout pre-generated
+ git merge pre-generated.tmp
+ git branch -d pre-generated.tmp
+ )
+ rm -rf -- "$workdir"
+ git worktree prune
fi
+}
-fi
+main &>/dev/tty &
diff --git a/bin/util.rb b/bin/util.rb
index 7b4805f..6ea3967 100644
--- a/bin/util.rb
+++ b/bin/util.rb
@@ -148,12 +148,21 @@ class Page
end
def rights
- years = `git log --date=format:'%Y' --format='%cd' -- .config/login.sh`.split('\n').map{|s|s.to_i}
- years.unshift(published.year) unless published.nil?
- years.unshift(updated.year) unless updated.nil?
- years = Set[*years]
- # TODO: simplify year spans
- @rights ||= "<p>The content of this page is Copyright © #{years.sort.join(', ')} #{author.html}.</p>\n" +
+ if published.nil? || updated.nil?
+ years = ''
+ else
+ first = published.year
+ last = updated.year
+
+ years = `git log --date=format:'%Y' --format='%cd' -- .config/login.sh`.split('\n').map{|s|s.to_i}
+ years.unshift(first)
+ years.unshift(last)
+
+ # Remove dups and git years outside of [first,last]
+ # TODO: simplify year spans
+ years = Set[*years.select{|i|i > first && i < last}].sort.join(', ')
+ end
+ @rights ||= "<p>The content of this page is Copyright © #{years} #{author.html}.</p>\n" +
"<p>This page is licensed under the #{license.html} license.</p>"
end