diff --git a/src/issue.rs b/src/issue.rs index e3bf9d3..03cca1d 100644 --- a/src/issue.rs +++ b/src/issue.rs @@ -137,12 +137,7 @@ impl Issue { } else if file_name == "dependencies" && direntry.metadata()?.is_dir() { dependencies = Self::read_dependencies(&direntry.path())?; } else if file_name == "tags" { - let contents = std::fs::read_to_string(direntry.path())?; - tags = contents - .lines() - .filter(|s| s.len() > 0) - .map(|tag| String::from(tag.trim())) - .collect(); + tags = Self::read_tags(&direntry)?; } else if file_name == "comments" && direntry.metadata()?.is_dir() { Self::read_comments(&mut comments, &direntry.path())?; } else { @@ -217,6 +212,23 @@ impl Issue { Ok(dependencies) } + fn read_tags(tags_direntry: &std::fs::DirEntry) -> Result, IssueError> { + if !tags_direntry.metadata()?.is_dir() { + eprintln!("issue has old-style tags file"); + return Err(IssueError::StdIoError(std::io::Error::from( + std::io::ErrorKind::NotADirectory, + ))); + } + let mut tags = Vec::::new(); + for direntry in tags_direntry.path().read_dir()? { + if let Ok(direntry) = direntry { + tags.push(String::from(direntry.file_name().to_string_lossy())); + } + } + tags.sort(); + Ok(tags) + } + /// Add a new Comment to the Issue. Commits. pub fn add_comment( &mut self, diff --git a/tools/update-tags-encoding b/tools/update-tags-encoding new file mode 100755 index 0000000..87c5a5d --- /dev/null +++ b/tools/update-tags-encoding @@ -0,0 +1,35 @@ +#!/bin/bash +# +# Check out the `entomologist-data` branch in a temporary worktree. +# For each issue with a `tags` file: +# read + +set -e +#set -x + +WORKTREE_DIR=$(mktemp --directory) +git worktree add "${WORKTREE_DIR}" entomologist-data +pushd "${WORKTREE_DIR}" > /dev/null + +for ISSUE_ID in $(find . -maxdepth 1 -type d -regextype posix-extended -regex '\./[0-9a-f]{32}'); do + if ! [[ -f "${ISSUE_ID}/tags" ]]; then + continue + fi + + pushd "${ISSUE_ID}" > /dev/null + + echo "${ISSUE_ID} has tags:" + TAGS=$(cat tags) + git rm tags + mkdir tags + for TAG in ${TAGS}; do + touch "tags/${TAG}" + done + git add tags + #git commit -m "issue ${ISSUE_ID}: update tags to new format" + + popd > /dev/null +done + +popd > /dev/null +git worktree remove "${WORKTREE_DIR}"