Changed behaviour of design() so that each design directory can have version controlled assets

This commit is contained in:
Nathan Broadbent
2011-10-22 10:10:34 +08:00
parent b70ef4dba1
commit 23d0057ac7
2 changed files with 38 additions and 35 deletions

View File

@@ -34,14 +34,17 @@ design() {
local all_project_dirs="$design_base_dirs $design_av_dirs" local all_project_dirs="$design_base_dirs $design_av_dirs"
# Ensure design dir contains all subdirectories # Ensure design dir contains all subdirectories
unset IFS 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 if [ -z "$1" ]; then
echo "design: Manage design directories for project assets that are external to source control." echo "design: Manage design directories for project assets that are external to source control."
echo echo
echo " Examples:" echo " Examples:"
echo 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_base_dirs)"
echo " $ design link # Links existing design directories into existing repos" echo " $ design link # Links existing design directories into existing repos"
echo " $ design init --av # Adds extra directories for audio/video assets" echo " $ design init --av # Adds extra directories for audio/video assets"
@@ -56,43 +59,43 @@ design() {
create_dirs="$design_base_dirs" create_dirs="$design_base_dirs"
if [ "$2" = "--av" ]; then create_dirs+=" $design_av_dirs"; fi if [ "$2" = "--av" ]; then create_dirs+=" $design_av_dirs"; fi
echo "Creating the following design directories for $project: $create_dirs" echo "Creating the following design directories for $project: $create_dirs"
mkdir -p "$project_design_dir"
# Create and symlink each directory # Create and symlink each directory
for dir in $create_dirs; do for dir in $create_dirs; do
mkdir -p "$root_design_dir/$dir/$project" mkdir -p "$root_design_dir/projects/$project/$dir"
if [ ! -e ./$project_design_dir/$dir ]; then ln -sf "$root_design_dir/$dir/$project" $project_design_dir/$dir; fi # 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 done
_design_add_git_exclude $PWD _design_add_git_exclude $PWD
elif [ "$1" = "link" ]; then elif [ "$1" = "link" ]; then
enable_nullglob enable_nullglob
echo "== Linking existing Design directories into existing repos..." echo "== Linking existing Design directories into existing repos..."
for dir in $all_project_dirs; do for design_project in $root_design_dir/projects/*; do
for design_path in $root_design_dir/$dir/*; do proj=$(basename $design_project)
proj=$(basename $design_path) repo_path=$(grep "/$proj$" $GIT_REPO_DIR/.git_index)
repo_path=$(grep "/$proj$" $GIT_REPO_DIR/.git_index) if [ -n "$repo_path" ]; then
if [ -n "$repo_path" ]; then if ! [ -e "$repo_path/$project_design_dir" ]; then
mkdir -p "$repo_path/$project_design_dir" ln -fs "$design_project" "$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"
_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"
fi fi
done echo "=> $repo_path/$project_design_dir"
fi
done done
disable_nullglob disable_nullglob
elif [ "$1" = "rm" ]; then elif [ "$1" = "rm" ]; then
echo "Removing all design directories for $project..." echo "Removing all design directories for $project..."
for dir in $all_project_dirs; do rm -rf "$root_design_dir/$dir/$project"; done rm -rf "$root_design_dir/projects/$project" "$project_design_dir"
rm -rf $project_design_dir
elif [ "$1" = "trim" ]; then elif [ "$1" = "trim" ]; then
echo "Trimming empty design directories for $project..." 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) asset=$(basename $dir)
rm -rf "$root_design_dir/$asset/$project" rm -rf "$root_design_dir/$project/$asset"
rm -f $project_design_dir/$asset rm -rf $project_design_dir/$asset
done done
# Remove design dir from project if there's nothing in it. # 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 if find $project_design_dir -type d -empty | grep -q $project_design_dir; then

View File

@@ -49,34 +49,34 @@ test_design() {
assertTrue "Root design dir not created! ($dir)" "[ -d $root_design_dir/$dir ]" || return assertTrue "Root design dir not created! ($dir)" "[ -d $root_design_dir/$dir ]" || return
done done
for dir in $design_base_dirs; do for dir in $design_base_dirs; do
assertTrue "Root design dir not created! ($dir)" "[ -d $root_design_dir/$dir/$project_name ]" || return assertTrue "Design dir not created! ($dir)" "[ -d $root_design_dir/projects/$project_name/$dir ]" || return
assertTrue "Project design dir not created! ($dir)" "[ -d $project_dir/design/$dir ]" || return assertTrue "Project design dir not symlinked! ($dir)" "[ -d $project_dir/design/$dir ]" || return
done done
# Test creation of 'av' design directories # Test creation of 'av' design directories
design init --av > /dev/null design init --av > /dev/null
for dir in $design_base_dirs $design_av_dirs; do 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 "Design dir not created! ($dir)" "[ -d $root_design_dir/projects/$project_name/$dir ]" || return
assertTrue "Project design dir not created! ($dir)" "[ -d $project_dir/design/$dir ]" || return assertTrue "Project design dir not symlinked! ($dir)" "[ -d $project_dir/design/$dir ]" || return
done done
# Test that 'design trim' removes empty directories, but doesn't touch non-empty directories # Test that 'design trim' removes empty directories, but doesn't touch non-empty directories
touch design/a/testfile design/c/testfile touch design/a/testfile design/c/testfile
design trim > /dev/null design trim > /dev/null
assertTrue "[ -d $project_dir/design/a ] && [ -d $root_design_dir/a/$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/b/$project_name ]" assertFalse "[ -d $project_dir/design/b ] || [ -d $root_design_dir/projects/$project_name/b ]"
assertTrue "[ -d $project_dir/design/c ] && [ -d $root_design_dir/c/$project_name ]" assertTrue "[ -d $project_dir/design/c ] && [ -d $root_design_dir/projects/$project_name/c ]"
assertFalse "[ -d $project_dir/design/d ] || [ -d $root_design_dir/d/$project_name ]" assertFalse "[ -d $project_dir/design/d ] || [ -d $root_design_dir/projects/$project_name/d ]"
assertFalse "[ -d $project_dir/design/e ] || [ -d $root_design_dir/e/$project_name ]" assertFalse "[ -d $project_dir/design/e ] || [ -d $root_design_dir/projects/$project_name/e ]"
# Test that 'design rm' removes all directories # Test that 'design rm' removes all directories
touch design/a/testfile design/c/testfile touch design/a/testfile design/c/testfile
design rm > /dev/null design rm > /dev/null
assertFalse "[ -d $project_dir/design/a ] || [ -d $root_design_dir/a/$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/b/$project_name ]" assertFalse "[ -d $project_dir/design/b ] || [ -d $root_design_dir/projects/$project_name/b ]"
assertFalse "[ -d $project_dir/design/c ] || [ -d $root_design_dir/c/$project_name ]" assertFalse "[ -d $project_dir/design/c ] || [ -d $root_design_dir/projects/$project_name/c ]"
assertFalse "[ -d $project_dir/design/d ] || [ -d $root_design_dir/d/$project_name ]" assertFalse "[ -d $project_dir/design/d ] || [ -d $root_design_dir/projects/$project_name/d ]"
assertFalse "[ -d $project_dir/design/e ] || [ -d $root_design_dir/e/$project_name ]" assertFalse "[ -d $project_dir/design/e ] || [ -d $root_design_dir/projects/$project_name/e ]"
} }