From 9391c6e2ff7d61c7f4b04bd824fd6c3ada23c3d3 Mon Sep 17 00:00:00 2001 From: Dmitry Makovey Date: Wed, 5 Jan 2022 12:32:21 -0700 Subject: [PATCH 1/6] add move functionality --- src/_adr_rename | 32 ++++++++++++++++++++++++++++++++ src/adr-move | 20 ++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100755 src/_adr_rename create mode 100755 src/adr-move diff --git a/src/_adr_rename b/src/_adr_rename new file mode 100755 index 0000000..87e66ec --- /dev/null +++ b/src/_adr_rename @@ -0,0 +1,32 @@ +#!/bin/bash +set -e +eval "$($(dirname $0)/adr-config)" + +source=$("$adr_bin_dir/_adr_file" "${1:?SOURCE}") +source_dir=${source%/*} +source_filename=${source##*/} +target=${2:?TARGET} +target_num=$(printf "%04d" ${target}) +target_filename=${source_filename/[0-9][0-9][0-9][0-9]/${target_num}} + +source_title=$("$adr_bin_dir/_adr_title" "$source") +source_short_title=$(echo "${source_title}" | sed 's/^[0-9]\+//g') +# source_num=$(echo "${source_title}" | sed 's/\(^[0-9]\+\)\..*/\1/g') +target_title="${target}${source_short_title}" + +pattern_escape_cmd='sed -e s/[]\/$*.^[]/\\&/g' +sub_escape_cmd='sed -e s/[\/&]/\\&/g' +source_filename_escaped=$(echo "${source_filename}" | ${pattern_escape_cmd}) +target_filename_escaped=$(echo "${target_filename}" | ${sub_escape_cmd}) + +source_title_escaped=$(echo "${source_title}" | ${pattern_escape_cmd}) +target_title_escaped=$(echo "${target_title}" | ${sub_escape_cmd}) + +# update file +mv ${source} ${source_dir}/${target_filename} + +# update references (it will update $target_file as well) +for adr_filename in $("$adr_bin_dir/adr-list") +do + sed -i "s/${source_filename_escaped}/${target_filename_escaped}/g ; s/${source_title_escaped}/${target_title_escaped}/g" ${adr_filename} +done diff --git a/src/adr-move b/src/adr-move new file mode 100755 index 0000000..8ceaa27 --- /dev/null +++ b/src/adr-move @@ -0,0 +1,20 @@ +#!/bin/bash +set -e +eval "$($(dirname $0)/adr-config)" + +## usage: adr link SOURCE LINK TARGET REVERSE-LINK +## +## Creates a link between two ADRs, from SOURCE to TARGET new. +## SOURCE and TARGET are both a reference (number or partial filename) to an ADR +## LINK is the description of the link created in the SOURCE. +## REVERSE-LINK is the description of the link created in the TARGET +## +## E.g. to create link ADR 12 to ADR 10 +## +## adr link 12 Amends 10 "Amended by" +## + +source="${1:?SOURCE}" +target="${2:?TARGET}" + +"$adr_bin_dir/_adr_rename" "$source" "$target" From bf0ba7ebb7dfc4330575fff90ba00c5b913b9462 Mon Sep 17 00:00:00 2001 From: Dmitry Makovey Date: Wed, 5 Jan 2022 12:35:41 -0700 Subject: [PATCH 2/6] streamline file naming --- src/_adr_rename | 32 -------------------------------- src/adr-move | 2 +- 2 files changed, 1 insertion(+), 33 deletions(-) delete mode 100755 src/_adr_rename diff --git a/src/_adr_rename b/src/_adr_rename deleted file mode 100755 index 87e66ec..0000000 --- a/src/_adr_rename +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash -set -e -eval "$($(dirname $0)/adr-config)" - -source=$("$adr_bin_dir/_adr_file" "${1:?SOURCE}") -source_dir=${source%/*} -source_filename=${source##*/} -target=${2:?TARGET} -target_num=$(printf "%04d" ${target}) -target_filename=${source_filename/[0-9][0-9][0-9][0-9]/${target_num}} - -source_title=$("$adr_bin_dir/_adr_title" "$source") -source_short_title=$(echo "${source_title}" | sed 's/^[0-9]\+//g') -# source_num=$(echo "${source_title}" | sed 's/\(^[0-9]\+\)\..*/\1/g') -target_title="${target}${source_short_title}" - -pattern_escape_cmd='sed -e s/[]\/$*.^[]/\\&/g' -sub_escape_cmd='sed -e s/[\/&]/\\&/g' -source_filename_escaped=$(echo "${source_filename}" | ${pattern_escape_cmd}) -target_filename_escaped=$(echo "${target_filename}" | ${sub_escape_cmd}) - -source_title_escaped=$(echo "${source_title}" | ${pattern_escape_cmd}) -target_title_escaped=$(echo "${target_title}" | ${sub_escape_cmd}) - -# update file -mv ${source} ${source_dir}/${target_filename} - -# update references (it will update $target_file as well) -for adr_filename in $("$adr_bin_dir/adr-list") -do - sed -i "s/${source_filename_escaped}/${target_filename_escaped}/g ; s/${source_title_escaped}/${target_title_escaped}/g" ${adr_filename} -done diff --git a/src/adr-move b/src/adr-move index 8ceaa27..a89eae6 100755 --- a/src/adr-move +++ b/src/adr-move @@ -17,4 +17,4 @@ eval "$($(dirname $0)/adr-config)" source="${1:?SOURCE}" target="${2:?TARGET}" -"$adr_bin_dir/_adr_rename" "$source" "$target" +"$adr_bin_dir/_adr_move" "$source" "$target" From 736424c525642ec5bfe87020be7d9bd2eefe93d4 Mon Sep 17 00:00:00 2001 From: Dmitry Makovey Date: Wed, 5 Jan 2022 12:36:03 -0700 Subject: [PATCH 3/6] streamline file naming --- src/_adr_move | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100755 src/_adr_move diff --git a/src/_adr_move b/src/_adr_move new file mode 100755 index 0000000..87e66ec --- /dev/null +++ b/src/_adr_move @@ -0,0 +1,32 @@ +#!/bin/bash +set -e +eval "$($(dirname $0)/adr-config)" + +source=$("$adr_bin_dir/_adr_file" "${1:?SOURCE}") +source_dir=${source%/*} +source_filename=${source##*/} +target=${2:?TARGET} +target_num=$(printf "%04d" ${target}) +target_filename=${source_filename/[0-9][0-9][0-9][0-9]/${target_num}} + +source_title=$("$adr_bin_dir/_adr_title" "$source") +source_short_title=$(echo "${source_title}" | sed 's/^[0-9]\+//g') +# source_num=$(echo "${source_title}" | sed 's/\(^[0-9]\+\)\..*/\1/g') +target_title="${target}${source_short_title}" + +pattern_escape_cmd='sed -e s/[]\/$*.^[]/\\&/g' +sub_escape_cmd='sed -e s/[\/&]/\\&/g' +source_filename_escaped=$(echo "${source_filename}" | ${pattern_escape_cmd}) +target_filename_escaped=$(echo "${target_filename}" | ${sub_escape_cmd}) + +source_title_escaped=$(echo "${source_title}" | ${pattern_escape_cmd}) +target_title_escaped=$(echo "${target_title}" | ${sub_escape_cmd}) + +# update file +mv ${source} ${source_dir}/${target_filename} + +# update references (it will update $target_file as well) +for adr_filename in $("$adr_bin_dir/adr-list") +do + sed -i "s/${source_filename_escaped}/${target_filename_escaped}/g ; s/${source_title_escaped}/${target_title_escaped}/g" ${adr_filename} +done From 887909aacfd37225565ff0e54f8a42d26552b00f Mon Sep 17 00:00:00 2001 From: Donald Richardson Date: Wed, 18 May 2022 16:08:06 -0400 Subject: [PATCH 4/6] When moving a record all the other records are renamed appropriately to keep everything int he right order --- src/_adr_move | 98 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 70 insertions(+), 28 deletions(-) diff --git a/src/_adr_move b/src/_adr_move index 87e66ec..718f9e6 100755 --- a/src/_adr_move +++ b/src/_adr_move @@ -2,31 +2,73 @@ set -e eval "$($(dirname $0)/adr-config)" -source=$("$adr_bin_dir/_adr_file" "${1:?SOURCE}") -source_dir=${source%/*} -source_filename=${source##*/} -target=${2:?TARGET} -target_num=$(printf "%04d" ${target}) -target_filename=${source_filename/[0-9][0-9][0-9][0-9]/${target_num}} - -source_title=$("$adr_bin_dir/_adr_title" "$source") -source_short_title=$(echo "${source_title}" | sed 's/^[0-9]\+//g') -# source_num=$(echo "${source_title}" | sed 's/\(^[0-9]\+\)\..*/\1/g') -target_title="${target}${source_short_title}" - -pattern_escape_cmd='sed -e s/[]\/$*.^[]/\\&/g' -sub_escape_cmd='sed -e s/[\/&]/\\&/g' -source_filename_escaped=$(echo "${source_filename}" | ${pattern_escape_cmd}) -target_filename_escaped=$(echo "${target_filename}" | ${sub_escape_cmd}) - -source_title_escaped=$(echo "${source_title}" | ${pattern_escape_cmd}) -target_title_escaped=$(echo "${target_title}" | ${sub_escape_cmd}) - -# update file -mv ${source} ${source_dir}/${target_filename} - -# update references (it will update $target_file as well) -for adr_filename in $("$adr_bin_dir/adr-list") -do - sed -i "s/${source_filename_escaped}/${target_filename_escaped}/g ; s/${source_title_escaped}/${target_title_escaped}/g" ${adr_filename} -done +function move { + source=$("$adr_bin_dir/_adr_file" "${1:?SOURCE}") + if [ ! -f "$source" ]; + then + return + fi + source_dir=${source%/*} + source_filename=${source##*/} + target=${2:?TARGET} + target_num=$(printf "%04d" ${target}) + target_filename=${source_filename/[0-9][0-9][0-9][0-9]/${target_num}} + + source_title=$("$adr_bin_dir/_adr_title" "$source") + source_short_title=$(echo "${source_title}" | sed 's/^[0-9]\+//g') + # source_num=$(echo "${source_title}" | sed 's/\(^[0-9]\+\)\..*/\1/g') + target_title="${target}. ${source_short_title}" + + pattern_escape_cmd='sed -e s/[]\/$*.^[]/\\&/g' + sub_escape_cmd='sed -e s/[\/&]/\\&/g' + source_filename_escaped=$(echo "${source_filename}" | ${pattern_escape_cmd}) + target_filename_escaped=$(echo "${target_filename}" | ${sub_escape_cmd}) + + source_title_escaped=$(echo "${source_title}" | ${pattern_escape_cmd}) + target_title_escaped=$(echo "${target_title}" | ${sub_escape_cmd}) + + echo -n "." + # update file + mv ${source} ${source_dir}/${target_filename} + + # update references (it will update $target_file as well) + for adr_filename in $("$adr_bin_dir/adr-list") + do + sed -i '' "s/${source_filename_escaped}/${target_filename_escaped}/g ; s/${source_title_escaped}/${target_title_escaped}/g ;" ${adr_filename} + done +} + +adr_dir=$("$adr_bin_dir/_adr_dir") + +if [ -d $adr_dir ] +then + count=`find $adr_dir | grep -E "^$adr_dir/[0-9]+-[^/]*\\.md" | wc -l | xargs` +else + echo "The $adr_dir directory does not exist" + exit 1 +fi + +end=`expr $count + 1` + +move $1 $end + +#Let's also rename all subsequence files so that they're still numbered in the correct order +if test $1 -gt $2 +then + before=$(expr $1 - 1) + for i in $(seq $before $2); + do + plusone=$(expr $i + 1) + move $i $plusone + done + move $end $2 +else + after=$(expr $1 + 1) + for i in $(seq $after $2); + do + minusone=$(expr $i - 1) + move $i $minusone + done + move $end $2 +fi + From 6db5e7aae7b8f4ce373badba18c3d04dd358a53c Mon Sep 17 00:00:00 2001 From: Donald Richardson Date: Wed, 18 May 2022 16:45:58 -0400 Subject: [PATCH 5/6] Added support for GNU and BSD versions of sed --- src/_adr_move | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/_adr_move b/src/_adr_move index 718f9e6..b657ab2 100755 --- a/src/_adr_move +++ b/src/_adr_move @@ -2,6 +2,9 @@ set -e eval "$($(dirname $0)/adr-config)" +echo -n | sed -E +whichsed=$? + function move { source=$("$adr_bin_dir/_adr_file" "${1:?SOURCE}") if [ ! -f "$source" ]; @@ -15,7 +18,12 @@ function move { target_filename=${source_filename/[0-9][0-9][0-9][0-9]/${target_num}} source_title=$("$adr_bin_dir/_adr_title" "$source") - source_short_title=$(echo "${source_title}" | sed 's/^[0-9]\+//g') + if [ $whichsed -eq 0 ]; + then + source_short_title=$(echo "${source_title}" | sed -E 's/^[0-9]+\.[[:space:]]+//g') + else + source_short_title=$(echo "${source_title}" | sed 's/^[0-9]\+\.\s\+//g') + fi # source_num=$(echo "${source_title}" | sed 's/\(^[0-9]\+\)\..*/\1/g') target_title="${target}. ${source_short_title}" @@ -34,7 +42,12 @@ function move { # update references (it will update $target_file as well) for adr_filename in $("$adr_bin_dir/adr-list") do - sed -i '' "s/${source_filename_escaped}/${target_filename_escaped}/g ; s/${source_title_escaped}/${target_title_escaped}/g ;" ${adr_filename} + if [ $whichsed -eq 0 ]; + then + sed -i '' "s/${source_filename_escaped}/${target_filename_escaped}/g ; s/${source_title_escaped}/${target_title_escaped}/g ;" ${adr_filename} + else + sed -i "s/${source_filename_escaped}/${target_filename_escaped}/g ; s/${source_title_escaped}/${target_title_escaped}/g ;" ${adr_filename} + fi done } From 5507f171d6a6e2ab289a7480360abdd517f4388f Mon Sep 17 00:00:00 2001 From: Donald Richardson Date: Wed, 18 May 2022 17:20:17 -0400 Subject: [PATCH 6/6] Fixed bug related to file name searching --- src/_adr_move | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/_adr_move b/src/_adr_move index b657ab2..925e6b3 100755 --- a/src/_adr_move +++ b/src/_adr_move @@ -5,15 +5,18 @@ eval "$($(dirname $0)/adr-config)" echo -n | sed -E whichsed=$? +adr_dir=$("$adr_bin_dir/_adr_dir") + function move { - source=$("$adr_bin_dir/_adr_file" "${1:?SOURCE}") + source_num=$(printf "%04d" $1) + source=$("$adr_bin_dir/_adr_file" "${adr_dir}/${source_num}") if [ ! -f "$source" ]; then return fi source_dir=${source%/*} source_filename=${source##*/} - target=${2:?TARGET} + target=$2 target_num=$(printf "%04d" ${target}) target_filename=${source_filename/[0-9][0-9][0-9][0-9]/${target_num}} @@ -24,7 +27,6 @@ function move { else source_short_title=$(echo "${source_title}" | sed 's/^[0-9]\+\.\s\+//g') fi - # source_num=$(echo "${source_title}" | sed 's/\(^[0-9]\+\)\..*/\1/g') target_title="${target}. ${source_short_title}" pattern_escape_cmd='sed -e s/[]\/$*.^[]/\\&/g' @@ -51,8 +53,6 @@ function move { done } -adr_dir=$("$adr_bin_dir/_adr_dir") - if [ -d $adr_dir ] then count=`find $adr_dir | grep -E "^$adr_dir/[0-9]+-[^/]*\\.md" | wc -l | xargs`