diff options
| -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 +} | 
