diff --git a/_vcsh b/_vcsh index 4fe1e5f7009b553a3c5ff0bb617c9b0ecaa6ae3e..5a14f647a8971db6fca05a81d69cb7bf73dc136b 100644 --- a/_vcsh +++ b/_vcsh @@ -9,4 +9,5 @@ _arguments \ run\:"run command on repo" init\:"init & clone from repo" clone\:"clone from repo" + seed-gitignore\:"seed .gitignore.d/foo from git ls-files" ))' diff --git a/doc/vcsh.1.ronn b/doc/vcsh.1.ronn index 541dba0bbffd394f0e16e64e17f87455040a74c3..270537785fd99bd5eda6601d1aa1186c2a189323 100644 --- a/doc/vcsh.1.ronn +++ b/doc/vcsh.1.ronn @@ -11,6 +11,8 @@ vcsh(1) - manage and sync config files via git `vcsh` list +`vcsh` seed-gitignore + `vcsh` help ## DESCRIPTION @@ -34,20 +36,23 @@ A sample configuration for `vcsh` and `mr` can be found at ## OPTIONS * init: - Initialize an empty repository + Initialize an empty repository. * clone: - Clone an existing repository + Clone an existing repository. * run: Run command with <$GIT_DIR> and <$GIT_WORK_TREE> set. Allows you to run any and all commands without any restrictions. Use with care. * list: - List all local vcsh repositories + List all local vcsh repositories. + +* seed-gitignore: + Seed .gitignore.d/<repo> from git ls-files. * help: - Display help + Display help. ## ENVIRONMENT diff --git a/vcsh b/vcsh index c1b4874f5e78bcbbe5a8c8ccb2276f3ed25d23d9..18288805d4e7c94b99d1bee21d095556d75d034e 100755 --- a/vcsh +++ b/vcsh @@ -18,7 +18,6 @@ do fi done - debug() { [ -n "$VCSH_DEBUG" ] && echo "$SELF: debug: $1" } @@ -42,7 +41,9 @@ help() { init <repo> Initialize a new repository clone <remote> \\ - [<repo>] Clone from an existing repository" >&2 + [<repo>] Clone from an existing repository + seed-gitignore \\ + <repo> Seed .gitignore.d/<repo> from git ls-files" >&2 } use() { @@ -152,7 +153,7 @@ elif [ "$1" = 'clone' ]; then elif [ "$1" = 'init' ]; then verbose "init begin" - [ -z $2 ] && help && return 0 + [ -z $2 ] && help && echo && echo "$SELF $1: please specify repository to work on" && return 0 export REPO_NAME="$2" export GIT_DIR="$VCSH_BASE/$REPO_NAME.git" init @@ -170,6 +171,26 @@ elif [ "$1" = 'init' ]; then # verbose "exit end" # exit 0 +elif [ "$1" = 'seed-gitignore' ]; then + verbose "seed-gitignore begin" + [ -z $2 ] && help && echo && echo "$SELF $1: please specify repository to work on" && return 0 + use "$2" + files=$(git ls-files) + gitignores=$(for file in $(git ls-files); do + while true; do + echo $file; new="${file%/*}" + [ "$file" = "$new" ] && break + file="$new" + done; + done | sort -u | sed 's/^/!/') + [ -e .gitignore.d/$2 ] && + echo "$SELF: .gitignore.d/$2 exists, moving it to .gitignore.d/$2.bak" && + mv -f .gitignore.d/$2 .gitignore.d/$2.bak + echo '*' > .gitignore.d/$2 + for gitignore in $gitignores; do + echo $gitignore >> .gitignore.d/$2 + done + else verbose "defaulting to calling help()" help