Skip to content

Commit

Permalink
patch-em-all: Purge destination dirs if possible
Browse files Browse the repository at this point in the history
[why]
When the file names of the source files change which happened for example
with these commits:
  ac432eb Updated Inconsolata source to latest upstream version of 2.001 (WIP #289)
  9c5ad2c Updated Inconsolata source to latest upstream version of 2.001 (WIP #289)

or the patched font files naming changes because of any other reason:

The patched-font directory will contain the new files along with the
unchanged old ones (because they where not overwritten).

Typically when manually updating the patched-fonts this is not a
problem, as the maintainer can clean this up by hand (if it is noticed).
But with a github action we might want to have that automatized.

To not deter the usability of the script for end-users or for patching
single fonts of a collection we do NOT want to purge 'all old files'
because we can not know if they are really old or not.

[how]
For each directory that we process from the source fonts we check if all
font files therein match our search criterion (pattern, $2). If we are
going to patch _all_ files that are in that source directory we delete all
font files in the destination directory; expecting that all files will
be recreated.
If we do _not_ patch _all_ files, we can do nothing, because we can not
decide if the existing files originate from one of the
not-to-be-processed source font files or are zombies.

Fixes: #786

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
  • Loading branch information
Finii committed Aug 18, 2022
1 parent 34fda84 commit afd7ba1
Showing 1 changed file with 24 additions and 1 deletion.
25 changes: 24 additions & 1 deletion bin/scripts/gotta-patch-em-all-font-patcher!.sh
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,18 @@ echo "$LINE_PREFIX Total source fonts found: ${#source_fonts[*]}"
function patch_font {
local f=$1; shift
local i=$1; shift
local purge=$1; shift
# take everything before the last slash (/) to start building the full path
local patched_font_dir="${f%/*}/"
# find replace unpatched parent dir with patched parent dir:
local patched_font_dir="${patched_font_dir/$unpatched_parent_dir/$patched_parent_dir}"

[[ -d "$patched_font_dir" ]] || mkdir -p "$patched_font_dir"
if [ -n ${purge} -a -d "${patched_font_dir}complete" ]
then
echo "Purging patched font dir ${patched_font_dir}complete"
rm ${patched_font_dir}complete/*.[to]tf
fi

config_parent_dir=$( cd "$( dirname "$f" )" && cd ".." && pwd)
config_dir=$( cd "$( dirname "$f" )" && pwd)
Expand Down Expand Up @@ -277,7 +283,24 @@ then
# Iterate through source fonts
for i in "${!source_fonts[@]}"
do
patch_font "${source_fonts[$i]}" "$i" 2>/dev/null &
purge_destination=""
current_source_dir=$(dirname ${source_fonts[$i]})
if [ "${current_source_dir}" != "${last_source_dir}" ]
then
# If we are going to patch ALL font files from a certain source directory
# the destination directory is purged (all font files therein deleted)
# to follow font naming changed. We can not do this if we patch only
# some of the source font files in that directory.
last_source_dir=${current_source_dir}
num_to_patch=$(find "${current_source_dir}" -iname "${like_pattern}*.[o,t]tf" -type f | wc -l)
num_existing=$(find "${current_source_dir}" -iname "*.[o,t]tf" -type f | wc -l)
if [ ${num_to_patch} -eq ${num_existing} ]
then
purge_destination="TRUE"
fi
fi
patch_font "${source_fonts[$i]}" "$i" "$purge_destination" 2>/dev/null


# un-comment to test this script (patch 1 font)
#break
Expand Down

0 comments on commit afd7ba1

Please sign in to comment.