]> git.madduck.net Git - code/vcsh.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Introduce seed-gitignore to, well, seed gitignore..
authorRichard Hartmann <richih.mailinglist@gmail.com>
Wed, 16 Nov 2011 21:29:16 +0000 (22:29 +0100)
committerRichard Hartmann <richih.mailinglist@gmail.com>
Wed, 16 Nov 2011 21:29:16 +0000 (22:29 +0100)
_vcsh
doc/vcsh.1.ronn
vcsh

diff --git a/_vcsh b/_vcsh
index 4fe1e5f7009b553a3c5ff0bb617c9b0ecaa6ae3e..5a14f647a8971db6fca05a81d69cb7bf73dc136b 100644 (file)
--- a/_vcsh
+++ b/_vcsh
@@ -9,4 +9,5 @@ _arguments \
                run\:"run command on repo"
                init\:"init & clone from repo"
                clone\:"clone from repo"
                run\:"run command on repo"
                init\:"init & clone from repo"
                clone\:"clone from repo"
+               seed-gitignore\:"seed .gitignore.d/foo from git ls-files"
        ))'
        ))'
index 541dba0bbffd394f0e16e64e17f87455040a74c3..270537785fd99bd5eda6601d1aa1186c2a189323 100644 (file)
@@ -11,6 +11,8 @@ vcsh(1) - manage and sync config files via git
 
 `vcsh` list
 
 
 `vcsh` list
 
+`vcsh` seed-gitignore
+
 `vcsh` help
 
 ## DESCRIPTION
 `vcsh` help
 
 ## DESCRIPTION
@@ -34,20 +36,23 @@ A sample configuration for `vcsh` and `mr` can be found at
 ## OPTIONS
 
 * init:
 ## OPTIONS
 
 * init:
-  Initialize an empty repository
+  Initialize an empty repository.
 
 * clone:
 
 * 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:
 
 * 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:
 
 * help:
-  Display help
+  Display help.
 
 ## ENVIRONMENT
 
 
 ## ENVIRONMENT
 
diff --git a/vcsh b/vcsh
index c1b4874f5e78bcbbe5a8c8ccb2276f3ed25d23d9..18288805d4e7c94b99d1bee21d095556d75d034e 100755 (executable)
--- a/vcsh
+++ b/vcsh
@@ -18,7 +18,6 @@ do
        fi
 done
 
        fi
 done
 
-
 debug() {
        [ -n "$VCSH_DEBUG" ] && echo "$SELF: debug: $1"
 }
 debug() {
        [ -n "$VCSH_DEBUG" ] && echo "$SELF: debug: $1"
 }
@@ -42,7 +41,9 @@ help() {
 
    init <repo>       Initialize a new repository
    clone <remote> \\
 
    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() {
 }
 
 use() {
@@ -152,7 +153,7 @@ elif [ "$1" = 'clone' ]; then
 
 elif [ "$1" = 'init' ]; then
        verbose "init begin"
 
 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
        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
 
 #      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
 else
        verbose "defaulting to calling help()"
        help