mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 04:52:59 +01:00
0d5bc0b0f5
867a5e172a23899a4a70eca4a396c64f1951745e guix: Register garbage collector root for containers (Carl Dong) 8f8b96fb542701b7717683caa3848390b24f77ab guix: Update hint messages to mention guix-clean (Carl Dong) 44f6d4f56b16e1dc5e8a23318b8e7aad0665f178 guix: Record precious directories and add guix-clean (Carl Dong) 84912d4b24382ae022da3a863bd6caa2b8948d94 build: Remove spaces from variable-printing rules (Carl Dong) Pull request description: ``` guix: Record precious directories and add guix-clean Many users have reported problems that stem from having an unclean working tree. To that end, I've written a guix-clean script which should help reset the working tree while respecting user-specified precious directories. Precious directories, such as: - SOURCES_PATH - BASE_CACHE - SDK_PATH - OUTDIR Should be preserved when cleaning the working tree, and are thus recorded in ./contrib/guix/var/precious_dirs. The ./contrib/guix/guix-clean script is able to parse that file and make sure to avoid them when cleaning out the working tree. ``` ACKs for top commit: laanwj: ACK 867a5e172a23899a4a70eca4a396c64f1951745e Tree-SHA512: c498fad781ff5e6406639df2b91b687fc528273fdf266bcdba8f6eec3b3b37ecce544b6da0252f0b9c6717f9d88e844e4c7b72d1877bdbabfc6871ddd0172af5
84 lines
2.4 KiB
Bash
Executable File
84 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
export LC_ALL=C
|
|
set -e -o pipefail
|
|
|
|
# Source the common prelude, which:
|
|
# 1. Checks if we're at the top directory of the Bitcoin Core repository
|
|
# 2. Defines a few common functions and variables
|
|
#
|
|
# shellcheck source=libexec/prelude.bash
|
|
source "$(dirname "${BASH_SOURCE[0]}")/libexec/prelude.bash"
|
|
|
|
|
|
###################
|
|
## Sanity Checks ##
|
|
###################
|
|
|
|
################
|
|
# Required non-builtin commands should be invokable
|
|
################
|
|
|
|
check_tools cat mkdir make git guix
|
|
|
|
|
|
#############
|
|
## Clean ##
|
|
#############
|
|
|
|
# Usage: under_dir MAYBE_PARENT MAYBE_CHILD
|
|
#
|
|
# If MAYBE_CHILD is a subdirectory of MAYBE_PARENT, print the relative path
|
|
# from MAYBE_PARENT to MAYBE_CHILD. Otherwise, return 1 as the error code.
|
|
#
|
|
# NOTE: This does not perform any symlink-resolving or path canonicalization.
|
|
#
|
|
under_dir() {
|
|
local path_residue
|
|
path_residue="${2##${1}}"
|
|
if [ -z "$path_residue" ] || [ "$path_residue" = "$2" ]; then
|
|
return 1
|
|
else
|
|
echo "$path_residue"
|
|
fi
|
|
}
|
|
|
|
# Usage: dir_under_git_root MAYBE_CHILD
|
|
#
|
|
# If MAYBE_CHILD is under the current git repository and exists, print the
|
|
# relative path from the git repository's top-level directory to MAYBE_CHILD,
|
|
# otherwise, exit with an error code.
|
|
#
|
|
dir_under_git_root() {
|
|
local rv
|
|
rv="$(under_dir "$(git_root)" "$1")"
|
|
[ -n "$rv" ] && echo "$rv"
|
|
}
|
|
|
|
shopt -s nullglob
|
|
found_precious_dirs_files=( "${version_base_prefix}"*/"${var_base_basename}/precious_dirs" ) # This expands to an array of directories...
|
|
shopt -u nullglob
|
|
|
|
exclude_flags=()
|
|
|
|
for precious_dirs_file in "${found_precious_dirs_files[@]}"; do
|
|
# Make sure the precious directories (e.g. SOURCES_PATH, BASE_CACHE, SDK_PATH)
|
|
# are excluded from git-clean
|
|
echo "Found precious_dirs file: '${precious_dirs_file}'"
|
|
|
|
# Exclude the precious_dirs file itself
|
|
if dirs_file_exclude_fragment=$(dir_under_git_root "$(dirname "$precious_dirs_file")"); then
|
|
exclude_flags+=( --exclude="${dirs_file_exclude_fragment}/precious_dirs" )
|
|
fi
|
|
|
|
# Read each 'name=dir' pair from the precious_dirs file
|
|
while IFS='=' read -r name dir; do
|
|
# Add an exclusion flag if the precious directory is under the git root.
|
|
if under=$(dir_under_git_root "$dir"); then
|
|
echo "Avoiding ${name}: ${under}"
|
|
exclude_flags+=( --exclude="$under" )
|
|
fi
|
|
done < "$precious_dirs_file"
|
|
done
|
|
|
|
git clean -xdff "${exclude_flags[@]}"
|