Merge branch 'dev-0.2.6' into dev-0.3

This commit is contained in:
ayakael 2018-05-17 19:48:39 -07:00
commit 2741e72574
No known key found for this signature in database
GPG key ID: 575626A4AE5F4026
14 changed files with 66 additions and 15 deletions

View file

@ -43,3 +43,8 @@
### v0.2.5
* Fixed bug with command parser not parsing options correctly
* Fixed bug where deploy would fail with errors that didn't exist
### v0.2.6
* Added "all" condition to apply exclude or include to all database
* Fixed bug where disk usage calculator would ungracefully exit when database had no selected tracks
* Added REPO_ID field to database to make sure that the provided GIT directory is the right git repo

View file

@ -5,6 +5,8 @@ Options
Defines path to git directory that contains the music collection. Defaults to current directory when not set.
Commands
init [<options>] </path/to/target>
Initializes target with database file
update [<options>] </path/to/target>
Populates database present in target folder with new images.
deploy [<options>] </path/to/target>

View file

@ -18,13 +18,14 @@ cmd_deploy() {
local DB_FILE="${TARGET}/${_OPT_DB_FILE}"
[[ ! -f "${DB_FILE}" ]] && return 3
[[ ! -d "${GIT_DIR}/.git" ]] && return 2
[[ "$(git -C "${GIT_DIR}" rev-list HEAD | tail -n 1)" != "$(awk 'BEGIN{FS="\t"}{if($1=="REPO_ID"){print $2}}' "${DB_FILE}")" ]] && return 2
if [[ -z "$(grep LAST_DEPLOY ${DB_FILE})" ]]; then
echo -e "LAST_DEPLOY\t$(git -C "${GIT_DIR}" rev-list HEAD | tail -n 1)" >> ${DB_FILE}
fi
local NEW_COMMIT=$(git -C "${GIT_DIR}" rev-parse HEAD)
[[ -z "${OLD_COMMIT}" ]] && local OLD_COMMIT=$(awk 'BEGIN{FS="\t"}{if($1=="LAST_DEPLOY"){print $2}}' ${DB_FILE})
[[ -z "${OLD_COMMIT}" ]] && local OLD_COMMIT=$(awk 'BEGIN{FS="\t"}{if($1=="LAST_DEPLOY"){print $2}}' "${DB_FILE}")
local removableidList=($(awk 'BEGIN{FS="\t"}{if(($1=="null" || $1=="false") && $4!="null"){print $2"--"$3}}' "${DB_FILE}"))
local deployableidList=($(awk 'BEGIN{FS="\t"}{if($1=="true" && $4=="null"){print $2}}' "${DB_FILE}" | awk '!seen[$0]++'))
local changedidList=($(sed 's/\(.*\)\..*/\1/' <<< $(git -C "${GIT_DIR}" diff --name-only ${NEW_COMMIT} ${OLD_COMMIT}) | awk '!seen[$0]++' | grep SHA256))

View file

@ -16,6 +16,7 @@ cmd_du() {
local DB_FILE="${TARGET}/${_OPT_DB_FILE}"
[[ ! -f "${DB_FILE}" ]] && return 3
[[ ! -d "${GIT_DIR}/.git" ]] && return 2
[[ "$(git -C "${GIT_DIR}" rev-list HEAD | tail -n 1)" != "$(awk 'BEGIN{FS="\t"}{if($1=="REPO_ID"){print $2}}' "${DB_FILE}")" ]] && return 2
local imageidList=($(awk 'BEGIN{FS="\t"}{if($1=="true"){print $2}}' ${DB_FILE} | awk '!seen[$0]++'))
local DU="$(print_imageid_du ${GIT_DIR} ${imageidList[@]})"

View file

@ -22,12 +22,13 @@ cmd_exclude() {
local conditionList=("${@}")
[[ ! -f "${DB_FILE}" ]] && return 3
[[ ! -d "${GIT_DIR}/.git" ]] && return 2
[[ "$(git -C "${GIT_DIR}" rev-list HEAD | tail -n 1)" != "$(awk 'BEGIN{FS="\t"}{if($1=="REPO_ID"){print $2}}' "${DB_FILE}")" ]] && return 2
for condition in ${conditionList[@]}; do
_msg EXEC "Excluding all tracks that match the following condition: ${condition}"
local MATCHES=$(db_set ${GIT_DIR} ${DB_FILE} false "${condition}" 2>${STDERR} | wc -l )
_msg ECHO "${MATCHES} matches"
[[ $? -ne 0 ]] && { _msg WARN 2; } || { _msg OK 2; }
[[ $? -ne 0 ]] && { _msg WARN 1; } || { _msg OK 1; }
done
local imageidList=($(awk 'BEGIN{FS="\t"}{if($1=="true"){print $2}}' ${DB_FILE} | awk '!seen[$0]++'))
local DU="$(print_imageid_du ${GIT_DIR} ${imageidList[@]})"

View file

@ -17,6 +17,7 @@ cmd_fsck() {
local DB_FILE="${TARGET}/${_OPT_DB_FILE}"
[[ ! -f "${DB_FILE}" ]] && return 3
[[ ! -d "${GIT_DIR}/.git" ]] && return 2
[[ "$(git -C "${GIT_DIR}" rev-list HEAD | tail -n 1)" != "$(awk 'BEGIN{FS="\t"}{if($1=="REPO_ID"){print $2}}' "${DB_FILE}")" ]] && return 2
for cmd in ${cmdList[@]}; do
case ${cmd} in

View file

@ -22,6 +22,7 @@ cmd_include() {
local conditionList=("${@}")
[[ ! -f "${DB_FILE}" ]] && return 3
[[ ! -d "${GIT_DIR}/.git" ]] && return 2
[[ "$(git -C "${GIT_DIR}" rev-list HEAD | tail -n 1)" != "$(awk 'BEGIN{FS="\t"}{if($1=="REPO_ID"){print $2}}' "${DB_FILE}")" ]] && return 2
for condition in ${conditionList[@]}; do
_msg EXEC "Including all tracks that match the following condition: ${condition}"

24
src/cmd_init Normal file
View file

@ -0,0 +1,24 @@
#!/bin/bash
# doc cmd_init {
#
# DESCRIPTION
# cmd_init - Initialized target directory with database file
#
# USAGE
# cmd_init </path/to/git/dir> </path/to/target>
#
# }
cmd_init() {
local GIT_DIR="${1}"
local TARGET="${2}"
local DB_FILE="${TARGET}/${_OPT_DB_FILE}"
[[ -f "${DB_FILE}" ]] && return 1
_msg EXEC "Initializing ${TARGET}"
echo -e "REPO_ID\t$(git -C "${GIT_DIR}" rev-list HEAD | tail -n 1)" > ${DB_FILE} 2>${STDERR}
[[ $? -ne 0 ]] && { _msg WARN; return 2; }
_msg OK
}

View file

@ -17,6 +17,7 @@ cmd_update() {
local DB_FILE="${TARGET}/${_OPT_DB_FILE}"
[[ ! -f "${DB_FILE}" ]] && return 3
[[ ! -d "${GIT_DIR}/.git" ]] && return 2
[[ "$(git -C "${GIT_DIR}" rev-list HEAD | tail -n 1)" != "$(awk 'BEGIN{FS="\t"}{if($1=="REPO_ID"){print $2}}' "${DB_FILE}")" ]] && return 2
# In the event that LAST_COMMIT OR DB_FILE does not exist, echo out that the LAST_COMMIT
# is the first COMMIT of GIT_DIR, thus stating that no database update has ever occured

View file

@ -21,13 +21,19 @@ db_set() {
local SELECTED="${3}"; shift 3
local CONDITION="${@}"
if [[ "${CONDITION}" == "all" ]]; then
gawk -i inplace -v selected=${SELECTED} 'BEGIN{FS="\t";OFS="\t";}{if($1!="LAST_DEPLOY" && $1!="LAST_UPDATE" && $1!="REPO_ID" && $1!="null"){$1=selected}{print $0}}' "${DB_FILE}"
cat "${DB_FILE}"
return 0
fi
# Defines what imageids are imported into database, as we're only going to act on those
local FIELD="$(echo ${CONDITION} | cut -d'=' -f1 | tr '[:lower:]' '[:upper:]' )"
local VALUE="$(echo ${CONDITION} | cut -d'=' -f2 | tr '[:lower:]' '[:upper:]' )"
# Determines which IMAGEIDs present in the DB_FILE match the CONDITION
local COUNT=1
local dbimageidList=$(awk 'BEGIN{FS="\t"}{if($1!="LAST_DEPLOY" && $1!="LAST_UPDATE" && $1!="null"){print $2}}' ${DB_FILE} | awk '!seen[$0]++')
local dbimageidList=$(awk 'BEGIN{FS="\t"}{if($1!="LAST_DEPLOY" && $1!="LAST_UPDATE" && $1!="REPO_ID" && $1!="null"){print $2}}' ${DB_FILE} | awk '!seen[$0]++')
for dbimageid in ${dbimageidList[@]}; do
local MTAG="$(printf "${GIT_DIR}/%s.tags" ${dbimageid})"
local MATCH="$(grep -i -l "\"${FIELD}\" : \"${VALUE}\"" "${MTAG}")"

View file

@ -24,7 +24,7 @@ db_update() {
fi
for trackid in ${trackidList[@]}; do
if [[ -z $(awk -v imageid="${IMAGEID}" -v trackid="${trackid}" 'BEGIN{FS="\t"}{if($2==imageid && $3==trackid){print $0}}' ${DB_FILE}) ]]; then
echo -e "true\t${IMAGEID}\t${trackid}\tnull" >> ${DB_FILE}
echo -e "false\t${IMAGEID}\t${trackid}\tnull" >> ${DB_FILE}
fi
done
return 0

View file

@ -32,7 +32,7 @@ deploy_meta() {
if [[ "${PRESENT_META}" != "${FUTURE_META}" ]]; then
_msg ECHO "${trackid} has differing metadata. Updating"
[[ "${PRESENT_PATH}" == "null" ]] || metaflac --remove-all "${TARGET}/${PRESENT_PATH}"
sed s'/;/\n/' <<< ${FUTURE_META} | metaflac --import-tags-from=- --import-picture-from="${GIT_DIR}/${IMAGEID}.jpg" "${TARGET}/${PRESENT_PATH}"
tr ';' \\n <<< ${FUTURE_META} | metaflac --import-tags-from=- --import-picture-from="${GIT_DIR}/${IMAGEID}.jpg" "${TARGET}/${PRESENT_PATH}"
[[ $? -eq 0 ]] || local ERR=true
fi

View file

@ -13,15 +13,14 @@ while true; do
shift
HELP="${1}"
[[ -z "${HELP}" ]] && HELP=general
eval help_${HELP}
exit
;;
eval help_${HELP}
exit
;;
--info)
--info)
help_info
exit
;;
exit
;;
--git-dir)
shift
@ -32,13 +31,21 @@ while true; do
break
;;
esac
shift
esac
shift
done
case "${1}" in
init)
shift
cmd_init "${GIT_DIR}" ${@}
EXIT=$?
[[ ${EXIT} -eq 1 ]] && echo "Database file already present"
[[ ${EXIT} -eq 2 ]] && echo "Init had errors"
;;
exclude)
shift
cmd_exclude "${GIT_DIR}" ${@}

View file

@ -13,7 +13,8 @@
print_imageid_du() {
local GIT_DIR="${1}"; shift
local imageidList=(${@})
[[ -z "${imageidList[@]}" ]] && echo 0
[[ -z "${imageidList[@]}" ]] && { echo 0; return 0; }
local bytesList=($(awk 'BEGIN{RS=",";FS=":"}{if($1=="\"size\""){print $2}}' <<<$(git -C "${GIT_DIR}" annex info --bytes --json $(printf "%s.flac\t" ${imageidList[@]}))))
[[ -z "${bytesList[@]}" ]] && { echo 0; return 0; }
dc <<< '[+]sa[z2!>az2!>b]sb'"$(sed 's/"//g' <<< "${bytesList[@]}")lbxp"
}