@ -1,8 +1,7 @@
#!/usr/bin/env bash
# -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*-
# SPDX-License-Identifier: AGPL-3.0-or-later
BUILD_COMMIT_MESSAGE = " Static build "
BUILD_COMMIT_MESSAGE = " [build] /static "
BUILT_PATHS = (
searx/static/themes/oscar/css
@ -14,70 +13,76 @@ BUILT_PATHS=(
searx/static/themes/simple/src/generated/pygments.less
)
CURRENT_BRANCH = " $( git branch --show-current) "
STAGED_FILES = $( git diff --name-only --cached)
git_log_current_branch( ) {
git log " heads/ ${ CURRENT_BRANCH } " --not --exclude= " ${ CURRENT_BRANCH } " --branches --remotes --pretty= format:"%h"
local branch
branch = " $( git branch --show-current) "
git log " ${ branch } " --pretty= format:'%h' \
--not --exclude= " ${ branch } " --branches --remotes
}
is.build.commit( ) {
COMMIT_SHA = $1
local commit_sha = " $1 "
local commit_message
local commit_files
# check commit message
COMMIT_MESSAGE = $( git show -s --format= %s ${ COMMIT_SHA } )
if [ " ${ COMMIT_MESSAGE } " != " ${ BUILD_COMMIT_MESSAGE } " ] ; then
echo " Commit message of ${ COMMIT_SHA} is ' ${ COMMIT_MESSAGE } ' "
commit_message= $( git show -s --format= %s " ${ commit_sha } " )
if [ " ${ commit_message } " != " ${ BUILD_COMMIT_MESSAGE } " ] ; then
echo " Commit message of ${ commit_sha} is ' ${ commit_message } ' "
return 1
fi
# check all files of the commit belongs to $BUILT_PATHS
COMMIT_FILES= $( git diff-tree --no-commit-id --name-only -r " ${ COMMIT_SHA } " )
commit_files= $( git diff-tree --no-commit-id --name-only -r " ${ commit_sha } " )
for i in ${ BUILT_PATHS [*] } ; do
# remove files of ${BUILT_PATHS}
COMMIT_FILES= $( echo " ${ COMMIT_FILES } " | grep -v " ^ ${ i } " )
commit_files= $( echo " ${ commit_files } " | grep -v " ^ ${ i } " )
done
if [ -n " ${ COMMIT_FILES } " ] ; then
echo " Commit $1 contains files that were not build: ${ COMMIT_FILES } "
if [ -n " ${ commit_files } " ] ; then
echo " Commit $1 contains files that were not build: ${ commit_files } "
return 2
fi
return 0
}
static.build.commit.drop( ) {
LAST_COMMIT_ID = $( git_log_current_branch | head -1)
local last_commit_id
last_commit_id = $( git_log_current_branch | head -1)
if [ -z " ${ LAST_COMMIT_ID } " ] ; then
if [ -z " ${ last_commit_id } " ] ; then
echo "Empty branch"
return 1
fi
is.build.commit " ${ LAST_COMMIT_ID } "
if [ $? -ne 0 ] ; then
if ! is.build.commit " ${ last_commit_id } " ; then
return $?
fi
echo " Drop last commit ${ LAST_COMMIT_ID } "
echo " Drop last commit ${ last_commit_id } "
git reset --hard HEAD~1
}
static.build.commit( ) {
local staged_files
# check for not commited files
NOT_COMMITED_FILES = " $( git diff --name-only) "
if [ -n " ${ NOT_COMMITED_FILES } " ] ; then
if [ -n " $( git diff --name-only) " ] ; then
echo "Some files are not commited:"
echo " ${ NOT_COMMITED_FILES } "
return 1
fi
staged_files = $( git diff --name-only --cached)
# check for staged files
if [ -n " ${ STAGED_FILES } " ] ; then
if [ -n " ${ staged_files } " ] ; then
echo "Some files are staged:"
echo " ${ STAGED_FILES } "
echo " ${ staged_files } "
return 1
fi
# drop existing commit
static.commit.drop
if [ $? -ne 0 ] ; then
if static.commit.drop; then
return $?
fi
@ -87,7 +92,7 @@ static.build.commit() {
make themes.all
# add build files
for built_path in ${ BUILT_PATHS [@] } ; do
for built_path in " ${ BUILT_PATHS [@] } " ; do
git add -v " ${ built_path } "
done
@ -96,16 +101,18 @@ static.build.commit() {
echo "make themes.all has created files that are not in BUILT_PATHS"
return 2
fi
#
git commit -m "Static build"
git commit -m " ${ BUILD_COMMIT_MESSAGE } "
)
}
static.git.restore.staged( ) {
local STAGED_FILES
STAGED_FILES = $( git diff --name-only --cached)
for i in ${ BUILT_PATHS [*] } ; do
STAGED_FILES_FOR_I = $( echo " ${ STAGED_FILES } " | grep " ^ ${ i } " )
if [ -n " ${ STAGED_FILES_FOR_I } " ] ; then
# shellcheck disable=SC2086
git restore --staged ${ STAGED_FILES_FOR_I }
fi
done
@ -118,6 +125,7 @@ static.git.restore() {
for i in ${ BUILT_PATHS [*] } ; do
NOT_COMMITED_FILES_FOR_I = $( echo " ${ NOT_COMMITED_FILES } " | grep " ^ ${ i } " )
if [ -n " ${ NOT_COMMITED_FILES_FOR_I } " ] ; then
# shellcheck disable=SC2086
git restore ${ NOT_COMMITED_FILES_FOR_I }
fi
done