From 871e22590e7de1a3d236bde7c9eb4d58d6495eb7 Mon Sep 17 00:00:00 2001 From: Motonori Iwata Date: Sat, 3 Sep 2011 21:21:58 +0900 Subject: [PATCH] create add and grep subcommand --- Makefile | 13 +++---- git-now | 94 +++++++++++++++++++++----------------------------- git-now-add | 28 +++++++++++++++ git-now-grep | 29 ++++++++++++++++ git-now-rebase | 26 +++++++------- git-now-update | 12 ------- git-now.rb | 18 +++++++--- 7 files changed, 131 insertions(+), 89 deletions(-) create mode 100644 git-now-add create mode 100644 git-now-grep mode change 100755 => 100644 git-now-rebase delete mode 100644 git-now-update diff --git a/Makefile b/Makefile index bb5a809..a828d7e 100644 --- a/Makefile +++ b/Makefile @@ -29,17 +29,18 @@ # Determine if we're inside a debian build .. ifdef DEB_BUILD_ARCH - prefix=$(DESTDIR)/usr/ + prefix=$(DESTDIR)/usr/ else - prefix=/usr/local + prefix=/usr/local endif # files that need mode 755 EXEC_FILES=git-now # files that need mode 644 -SCRIPT_FILES =git-now-rebase -SCRIPT_FILES+=git-now-update +SCRIPT_FILES =git-now-add +SCRIPT_FILES+=git-now-grep +SCRIPT_FILES+=git-now-rebase SCRIPT_FILES+=gitnow-common SCRIPT_FILES+=gitnow-shFlags @@ -54,5 +55,5 @@ install: uninstall: test -d $(prefix)/bin && \ - cd $(prefix)/bin && \ - rm -f $(EXEC_FILES) $(SCRIPT_FILES) + cd $(prefix)/bin && \ + rm -f $(EXEC_FILES) $(SCRIPT_FILES) diff --git a/git-now b/git-now index ffeb581..9ee7500 100755 --- a/git-now +++ b/git-now @@ -2,88 +2,74 @@ # enable debug mode if [ "$DEBUG" = "yes" ]; then - set -x + set -x fi export GITNOW_DIR=$(dirname "$0") PREFIX="from now" usage() { - echo "usage: git now [-n] [-v] [--force | -f] [--interactive | -i] [--patch | -p]" + echo "usage: git now [-n] [-v] [--force | -f] [--interactive | -i] [--patch | -p]" echo " [--edit | -e] [--all | [--update | -u]] [--intent-to-add | -N]" echo " [--refresh] [--ignore-errors] [--ignore-missing] [--]" echo " [...]" echo echo " git now " - echo - echo "Available subcommands are:" - echo " rebase rebase for temporary commits." - echo - echo "Try 'git now help' for details." + echo + echo "Available subcommands are:" + echo " add default subcommand." + echo " rebase rebase for temporary commits." + echo " grep grep temporary commits." + echo + echo "Try 'git now help' for details." } main() { - # load common functionality - . "$GITNOW_DIR/gitnow-common" + # load common functionality + . "$GITNOW_DIR/gitnow-common" - # This environmental variable fixes non-POSIX getopt style argument - # parsing, effectively breaking git-now subcommand parsing on several - # Linux platforms. - export POSIXLY_CORRECT=1 + # This environmental variable fixes non-POSIX getopt style argument + # parsing, effectively breaking git-now subcommand parsing on several + # Linux platforms. + export POSIXLY_CORRECT=1 - # use the shFlags project to parse the command line arguments - . "$GITNOW_DIR/gitnow-shFlags" - FLAGS_PARENT="git now" - FLAGS "$@" || exit $? - eval set -- "${FLAGS_ARGV}" + # use the shFlags project to parse the command line arguments + . "$GITNOW_DIR/gitnow-shFlags" - # sanity checks - SUBCOMMAND="$1"; shift - - if [ ! -e "$GITNOW_DIR/git-now-$SUBCOMMAND" ]; then + SUBCOMMAND="$1" + if [ ! -e "$GITNOW_DIR/git-now-$SUBCOMMAND" ]; then if [ "$SUBCOMMAND" = "help" ]; then usage + exit 0 else - main_add "$@" + SUBCOMMAND="add" fi - exit 0 - fi + else + FLAGS_PARENT="git now" + FLAGS "$@" || exit $? + eval set -- "${FLAGS_ARGV}"; shift - # run command - . "$GITNOW_DIR/git-now-$SUBCOMMAND" - FLAGS_PARENT="git now $SUBCOMMAND" + FLAGS_PARENT="git now $SUBCOMMAND" + fi - # test if the first argument is a flag (i.e. starts with '-') - # in that case, we interpret this arg as a flag for the default - # command + # run command + . "$GITNOW_DIR/git-now-$SUBCOMMAND" + + # test if the first argument is a flag (i.e. starts with '-') + # in that case, we interpret this arg as a flag for the default + # command SUBACTION="default" if [ "$1" = "help" ] && { ! echo "$1" | grep -q "^-"; } then SUBACTION="$1"; shift fi - #if ! type "cmd_$SUBACTION" >/dev/null 2>&1; then - #warn "Unknown subcommand: '$SUBACTION'" - #usage - #exit 1 - #fi + #if ! type "cmd_$SUBACTION" >/dev/null 2>&1; then + #warn "Unknown subcommand: '$SUBACTION'" + #usage + #exit 1 + #fi - # run the specified action - cmd_$SUBACTION "$@" -} - -main_add() { - MESSAGE="[${PREFIX}] `date +\"%Y/%m/%d %T\"`" - if [ $# -eq 0 ]; then - echo "git add -u" - #printf "${MESSAGE}\n\n%s" "`git diff --cached`" | git commit -F - - else - if [ $1 != "--all" ]; then - echo "git add $@" - else - echo "git add -u" - echo "git add ." - fi - #printf "${MESSAGE}\n\n%s" "`git diff --cached`" | git commit -F - - fi + # run the specified action + cmd_$SUBACTION "$@" } main "$@" diff --git a/git-now-add b/git-now-add new file mode 100644 index 0000000..0976d63 --- /dev/null +++ b/git-now-add @@ -0,0 +1,28 @@ +usage() { + echo "usage: git now add [-n] [-v] [--force | -f] [--interactive | -i] [--patch | -p]" + echo " [--edit | -e] [--all | [--update | -u]] [--intent-to-add | -N]" + echo " [--refresh] [--ignore-errors] [--ignore-missing] [--]" + echo " [...]" +} + +cmd_default() { + MESSAGE="[${PREFIX}] `date +\"%Y/%m/%d %T\"`" + if [ $# -eq 0 ]; then + git add -u + printf "${MESSAGE}\n\n%s" "`git diff --cached`" | git commit -F - + else + if [ $1 != "--all" ]; then + git add $@ + else + git add -u + git add . + fi + printf "${MESSAGE}\n\n%s" "`git diff --cached`" | git commit -F - + fi +} + +cmd_help() { + usage + exit 0 +} + diff --git a/git-now-grep b/git-now-grep new file mode 100644 index 0000000..d1d6e56 --- /dev/null +++ b/git-now-grep @@ -0,0 +1,29 @@ +usage() { + echo "usage: git now grep []" +} + +cmd_default() { + parse_args "$@" + + if [ -n "$BASE_BRANCH" ]; then + WORKING_BRANCH=$(git_current_branch) + COMMON_ANCESTOR_COMMIT=`git merge-base ${BASE_BRANCH} ${WORKING_BRANCH}` + echo `git log ${COMMON_ANCESTOR_COMMIT}.. --pretty=oneline --grep="${PREFIX}"` + else + echo `git log --pretty=oneline --grep="${PREFIX}"` + fi +} + +parse_args() { + # parse options + FLAGS "$@" || exit $? + eval set -- "${FLAGS_ARGV}" + # read arguments into global variables + BASE_BRANCH=$1 +} + +cmd_help() { + usage + exit 0 +} + diff --git a/git-now-rebase b/git-now-rebase old mode 100755 new mode 100644 index 2055332..0d28509 --- a/git-now-rebase +++ b/git-now-rebase @@ -1,6 +1,6 @@ usage() { echo "usage: git now rebase []" - echo " git now rebase -p [-r ] []" + echo " git now rebase --push|-p [--remote|-r ] []" } @@ -15,21 +15,21 @@ cmd_default() { FIRST_NOW_COMMIT=$(git_now_first_commit $COMMON_ANCESTOR_COMMIT) if [ "$FIRST_NOW_COMMIT" != "$INITIAL_COMMIT" ]; then - echo "git rebase -i ${FIRST_NOW_COMMIT}^" + git rebase -i ${FIRST_NOW_COMMIT}^ else - echo "git checkout ${FIRST_NOW_COMMIT}" - echo "git commit --amend" - echo "git rebase --onto HEAD ${FIRST_NOW_COMMIT} ${WORKING_BRANCH}" + git checkout ${FIRST_NOW_COMMIT} + git commit --amend + git rebase --onto HEAD ${FIRST_NOW_COMMIT} ${WORKING_BRANCH} fi else FIRST_NOW_COMMIT=$(git_now_first_commit) if [ "$FIRST_NOW_COMMIT" != "$INITIAL_COMMIT" ]; then - echo "git rebase -i ${FIRST_NOW_COMMIT}^" + git rebase -i ${FIRST_NOW_COMMIT}^ else - echo "git checkout ${FIRST_NOW_COMMIT}" - echo "git commit --amend" - echo "git rebase --onto HEAD ${FIRST_NOW_COMMIT} ${WORKING_BRANCH}" + git checkout ${FIRST_NOW_COMMIT} + git commit --amend + git rebase --onto HEAD ${FIRST_NOW_COMMIT} ${WORKING_BRANCH} fi fi @@ -45,8 +45,8 @@ cmd_help() { parse_args() { # parse options - DEFINE_boolean push false 'push to remote repository finally' 'p' - DEFINE_string remote '' 'remote branch name to --set-upstream' 'r' + DEFINE_boolean 'push' false 'push to remote repository finally' 'p' + DEFINE_string 'remote' '' 'remote branch name to --set-upstream' 'r' FLAGS "$@" || exit $? eval set -- "${FLAGS_ARGV}" @@ -59,9 +59,9 @@ _cmd_push() { local branch=$1 local remote=$2 if [ -n "$remote" ]; then - echo "git push --set-upstream ${remote} ${branch}" + git push --set-upstream ${remote} ${branch} else - echo "git push" + git push fi } diff --git a/git-now-update b/git-now-update deleted file mode 100644 index dd2d168..0000000 --- a/git-now-update +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -PREFIX="from now" - -if [ ! "`git log --pretty=oneline $3 | head -n 1 | grep "${PREFIX}"`" ] -then - exit 0 -else - echo "error: There are tmp log messages in the received objects." 1>&2 - echo "error: Change these messages by 'git now --rebase'." 1>&2 - exit 1 -fi diff --git a/git-now.rb b/git-now.rb index 2852ecd..d6f4229 100644 --- a/git-now.rb +++ b/git-now.rb @@ -1,7 +1,17 @@ require 'formula' -class GitNow < GithubGistFormula - url 'https://gist.github.com/raw/1167062/03c52077ce8c7fb72537bdf9cbd50bd11f3a9d5c/git-now' - md5 '72a36ca8deb21b7cc26b8a8f5dc3e7be' - homepage 'https://gist.github.com/1167062' +class GitNow < Formula + url 'https://github.com/nvie/gitflow.git', :tag => 'v0.0.1' + version '0.0.1' + head 'https://github.com/iwata/git-now.git', :branch => 'develop' + homepage 'https://github.com/iwata/git-now' + + # for longopt + depends_on 'gnu-getopt' + + def install + system "make", "prefix=#{prefix}", "install" + system "brew ln gnu-getopt" + end + end