From 2a61549feb63117b5ffaa6fef5f80feb293b3dbe Mon Sep 17 00:00:00 2001 From: Richard Hartmann Date: Wed, 16 Nov 2011 22:29:16 +0100 Subject: [PATCH] Introduce seed-gitignore to, well, seed gitignore.. --- _vcsh | 1 + doc/vcsh.1.ronn | 13 +++++++++---- vcsh | 27 ++++++++++++++++++++++++--- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/_vcsh b/_vcsh index 4fe1e5f..5a14f64 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 541dba0..2705377 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/ from git ls-files. * help: - Display help + Display help. ## ENVIRONMENT diff --git a/vcsh b/vcsh index c1b4874..1828880 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 Initialize a new repository clone \\ - [] Clone from an existing repository" >&2 + [] Clone from an existing repository + seed-gitignore \\ + Seed .gitignore.d/ 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 -- 2.39.2