diff options
Diffstat (limited to 'include/git.sh')
-rwxr-xr-x | include/git.sh | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/include/git.sh b/include/git.sh index f5aa34eb..3052d5b4 100755 --- a/include/git.sh +++ b/include/git.sh @@ -46,6 +46,7 @@ prepare_new_tree() cp -R "src/$project/$project" "$tmpgit" || \ $err "prepare_new_tree $project/$tree: can't make tmpclone" git_prep "$PWD/$cfgsdir/$tree/patches" "src/$project/$tree" "update" + nuke "$project/$tree" "$project/$tree" } fetch_project_repo() @@ -61,6 +62,10 @@ fetch_project_repo() x_ ./update trees -f $d done rm -Rf "$tmpgit" || $err "fetch_repo: !rm -Rf $tmpgit" + + for x in config/git/*; do + [ -f "$x" ] && nuke "${x##*/}" "src/${x##*/}"; continue + done } clone_project() @@ -181,3 +186,32 @@ move_repo() [ -n "$xtree" ] && [ ! -d "src/coreboot/$xtree" ] && \ x_ ./update trees -f coreboot "$xtree"; return 0 } + +# can delete from multi- and single-tree projects. +# called from script/trees when downloading sources. +nuke() +{ + del="n" + pjcfgdir="${1%/}" + pjsrcdir="${2%/}" + pjsrcdir="${pjsrcdir#src/}" + [ ! -f "config/$pjcfgdir/nuke.list" ] && return 0 + + while read -r nukefile; do + rmf="$(realpath "src/$pjsrcdir/$nukefile" 2>/dev/null)" || \ + continue + [ -L "$rmf" ] && continue # we will delete the actual file + [ "${rmf#"$PWD/src/$pjsrcdir"}" = "$rmf" ] && continue + [ "${rmf#"$PWD/src/"}" = "$pjsrcdir" ] && continue + rmf="${rmf#"$PWD/"}" + [ -e "$rmf" ] || continue + del="y" + rm -Rf "$rmf" || $err "$nuke pjcfgdir: can't rm \"$nukefile\"" + printf "nuke %s: deleted \"%s\"\n" "$pjcfgdir" "$rmf" + done < "config/$pjcfgdir/nuke.list" + + [ "${del}" = "y" ] && return 0 + printf "nuke %s: no defined files exist in dir, src/%s\n" 1>&2 \ + "$pjcfgdir" "$pjsrcdir" + printf "(this is not an error)\n" 1>&2 +} |