diff --git a/lib/design.sh b/lib/design.sh index f1b79cb..cfb5b72 100644 --- a/lib/design.sh +++ b/lib/design.sh @@ -34,14 +34,17 @@ design() { local all_project_dirs="$design_base_dirs $design_av_dirs" # Ensure design dir contains all subdirectories unset IFS - for dir in $design_ext_dirs $design_base_dirs $design_av_dirs; do mkdir -p "$root_design_dir/$dir"; done + # Create root design dirs + for dir in $design_ext_dirs; do mkdir -p "$root_design_dir/$dir"; done + # Create project design dirs + mkdir -p "$root_design_dir/projects" if [ -z "$1" ]; then echo "design: Manage design directories for project assets that are external to source control." echo echo " Examples:" echo - echo " $ design init # Creates default directory structure at $root_design_dir/**/$project and symlinks into project." + echo " $ design init # Creates default directory structure at $root_design_dir/projects/$project and symlinks into project." echo " ($design_base_dirs)" echo " $ design link # Links existing design directories into existing repos" echo " $ design init --av # Adds extra directories for audio/video assets" @@ -56,43 +59,43 @@ design() { create_dirs="$design_base_dirs" if [ "$2" = "--av" ]; then create_dirs+=" $design_av_dirs"; fi echo "Creating the following design directories for $project: $create_dirs" - mkdir -p "$project_design_dir" # Create and symlink each directory for dir in $create_dirs; do - mkdir -p "$root_design_dir/$dir/$project" - if [ ! -e ./$project_design_dir/$dir ]; then ln -sf "$root_design_dir/$dir/$project" $project_design_dir/$dir; fi + mkdir -p "$root_design_dir/projects/$project/$dir" + # Initialize git repo for each design dir, if you want to version control your assets + cd "$root_design_dir/projects/$project" + git init + cd - > /dev/null + if [ ! -e ./$project_design_dir ]; then ln -sf "$root_design_dir/projects/$project" $project_design_dir; fi done _design_add_git_exclude $PWD elif [ "$1" = "link" ]; then enable_nullglob echo "== Linking existing Design directories into existing repos..." - for dir in $all_project_dirs; do - for design_path in $root_design_dir/$dir/*; do - proj=$(basename $design_path) - repo_path=$(grep "/$proj$" $GIT_REPO_DIR/.git_index) - if [ -n "$repo_path" ]; then - mkdir -p "$repo_path/$project_design_dir" - if [ -e "$repo_path/$project_design_dir/*" ]; then rm $repo_path/$project_design_dir/*; fi - _design_add_git_exclude $repo_path - if ! [ -e "$repo_path/$project_design_dir/$dir" ]; then ln -fs "$design_path" "$repo_path/$project_design_dir/$dir"; fi - echo "=> $repo_path/$project_design_dir/$dir" + for design_project in $root_design_dir/projects/*; do + proj=$(basename $design_project) + repo_path=$(grep "/$proj$" $GIT_REPO_DIR/.git_index) + if [ -n "$repo_path" ]; then + if ! [ -e "$repo_path/$project_design_dir" ]; then + ln -fs "$design_project" "$repo_path/$project_design_dir" + _design_add_git_exclude "$repo_path" fi - done + echo "=> $repo_path/$project_design_dir" + fi done disable_nullglob elif [ "$1" = "rm" ]; then echo "Removing all design directories for $project..." - for dir in $all_project_dirs; do rm -rf "$root_design_dir/$dir/$project"; done - rm -rf $project_design_dir + rm -rf "$root_design_dir/projects/$project" "$project_design_dir" elif [ "$1" = "trim" ]; then echo "Trimming empty design directories for $project..." - for dir in $(find -L $project_design_dir/ -type d -empty); do + for dir in $(find $project_design_dir/ -type d -empty); do asset=$(basename $dir) - rm -rf "$root_design_dir/$asset/$project" - rm -f $project_design_dir/$asset + rm -rf "$root_design_dir/$project/$asset" + rm -rf $project_design_dir/$asset done # Remove design dir from project if there's nothing in it. if find $project_design_dir -type d -empty | grep -q $project_design_dir; then diff --git a/test/lib/design_test.sh b/test/lib/design_test.sh index b461002..5256dae 100755 --- a/test/lib/design_test.sh +++ b/test/lib/design_test.sh @@ -49,34 +49,34 @@ test_design() { assertTrue "Root design dir not created! ($dir)" "[ -d $root_design_dir/$dir ]" || return done for dir in $design_base_dirs; do - assertTrue "Root design dir not created! ($dir)" "[ -d $root_design_dir/$dir/$project_name ]" || return - assertTrue "Project design dir not created! ($dir)" "[ -d $project_dir/design/$dir ]" || return + assertTrue "Design dir not created! ($dir)" "[ -d $root_design_dir/projects/$project_name/$dir ]" || return + assertTrue "Project design dir not symlinked! ($dir)" "[ -d $project_dir/design/$dir ]" || return done # Test creation of 'av' design directories design init --av > /dev/null for dir in $design_base_dirs $design_av_dirs; do - assertTrue "Root design dir not created! ($dir)" "[ -d $root_design_dir/$dir/$project_name ]" || return - assertTrue "Project design dir not created! ($dir)" "[ -d $project_dir/design/$dir ]" || return + assertTrue "Design dir not created! ($dir)" "[ -d $root_design_dir/projects/$project_name/$dir ]" || return + assertTrue "Project design dir not symlinked! ($dir)" "[ -d $project_dir/design/$dir ]" || return done # Test that 'design trim' removes empty directories, but doesn't touch non-empty directories touch design/a/testfile design/c/testfile design trim > /dev/null - assertTrue "[ -d $project_dir/design/a ] && [ -d $root_design_dir/a/$project_name ]" - assertFalse "[ -d $project_dir/design/b ] || [ -d $root_design_dir/b/$project_name ]" - assertTrue "[ -d $project_dir/design/c ] && [ -d $root_design_dir/c/$project_name ]" - assertFalse "[ -d $project_dir/design/d ] || [ -d $root_design_dir/d/$project_name ]" - assertFalse "[ -d $project_dir/design/e ] || [ -d $root_design_dir/e/$project_name ]" + assertTrue "[ -d $project_dir/design/a ] && [ -d $root_design_dir/projects/$project_name/a ]" + assertFalse "[ -d $project_dir/design/b ] || [ -d $root_design_dir/projects/$project_name/b ]" + assertTrue "[ -d $project_dir/design/c ] && [ -d $root_design_dir/projects/$project_name/c ]" + assertFalse "[ -d $project_dir/design/d ] || [ -d $root_design_dir/projects/$project_name/d ]" + assertFalse "[ -d $project_dir/design/e ] || [ -d $root_design_dir/projects/$project_name/e ]" # Test that 'design rm' removes all directories touch design/a/testfile design/c/testfile design rm > /dev/null - assertFalse "[ -d $project_dir/design/a ] || [ -d $root_design_dir/a/$project_name ]" - assertFalse "[ -d $project_dir/design/b ] || [ -d $root_design_dir/b/$project_name ]" - assertFalse "[ -d $project_dir/design/c ] || [ -d $root_design_dir/c/$project_name ]" - assertFalse "[ -d $project_dir/design/d ] || [ -d $root_design_dir/d/$project_name ]" - assertFalse "[ -d $project_dir/design/e ] || [ -d $root_design_dir/e/$project_name ]" + assertFalse "[ -d $project_dir/design/a ] || [ -d $root_design_dir/projects/$project_name/a ]" + assertFalse "[ -d $project_dir/design/b ] || [ -d $root_design_dir/projects/$project_name/b ]" + assertFalse "[ -d $project_dir/design/c ] || [ -d $root_design_dir/projects/$project_name/c ]" + assertFalse "[ -d $project_dir/design/d ] || [ -d $root_design_dir/projects/$project_name/d ]" + assertFalse "[ -d $project_dir/design/e ] || [ -d $root_design_dir/projects/$project_name/e ]" }