Merge branch 'master' of .
authorJunio C Hamano <junkio@cox.net>
Tue, 13 Sep 2005 05:02:42 +0000 (22:02 -0700)
committerJunio C Hamano <junkio@cox.net>
Tue, 13 Sep 2005 05:02:42 +0000 (22:02 -0700)
12 files changed:
.gitignore
Documentation/git-grep.txt [new file with mode: 0644]
Documentation/git.txt
INSTALL
Makefile
cache.h
git-checkout.sh
git-core.spec.in
git-format-patch.sh
git-grep.sh [new file with mode: 0755]
git-merge-fredrik.py
gitMergeCommon.py

index be9ea5f..cc2b29e 100644 (file)
@@ -31,6 +31,7 @@ git-fetch-pack
 git-format-patch
 git-fsck-objects
 git-get-tar-commit-id
+git-grep
 git-hash-object
 git-http-fetch
 git-init-db
diff --git a/Documentation/git-grep.txt b/Documentation/git-grep.txt
new file mode 100644 (file)
index 0000000..c275ae2
--- /dev/null
@@ -0,0 +1,47 @@
+git-grep(1)
+===========
+v0.99.6, Sep 2005
+
+NAME
+----
+git-grep - print lines matching a pattern
+
+
+SYNOPSIS
+--------
+'git-grep' <option>... <pattern> <path>...
+
+DESCRIPTION
+-----------
+Searches list of files `git-ls-files` produces for lines
+containing a match to the given pattern.
+
+
+OPTIONS
+-------
+<option>...::
+       Either an option to pass to `grep` or `git-ls-files`.
+       Some `grep` options, such as `-C` and `-m`, that take
+       parameters are known to `git-grep`.
+
+<pattern>::
+       The pattern to look for.
+
+<path>...::
+
+       Optional paths to limit the set of files to be searched;
+       passed to `git-ls-files`.
+
+
+Author
+------
+Written by Linus Torvalds <torvalds@osdl.org>
+
+Documentation
+--------------
+Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
+
+GIT
+---
+Part of the link:git.html[git] suite
+
index aabc774..31dd474 100644 (file)
@@ -1,6 +1,6 @@
 git(7)
 ======
-v0.99.5, Aug 2005
+v0.99.6, Sep 2005
 
 NAME
 ----
@@ -238,7 +238,7 @@ link:git-commit.html[git-commit]::
        Previously this command was known as git-commit-script.
 
 link:git-diff.html[git-diff]::
-       git-diff.
+       Show changes between commits, commit and working tree, etc.
        Previously this command was known as git-diff-script.
 
 link:git-fetch.html[git-fetch]::
@@ -246,9 +246,12 @@ link:git-fetch.html[git-fetch]::
        Previously this command was known as git-fetch-script.
 
 link:git-format-patch.html[git-format-patch]::
-       git-format-patch.
+       Prepare patches for e-mail submission.
        Previously this command was known as git-format-patch-script.
 
+link:git-grep.html[git-grep]::
+       Print lines matching a pattern
+
 link:git-log.html[git-log]::
        Shows commit logs.
        Previously this command was known as git-log-script.
diff --git a/INSTALL b/INSTALL
index 14580cc..6e336d7 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -64,3 +64,8 @@ Issues of note:
          You'll only need the merge program if you do development using
          git, and if you only use git to track other peoples work you'll
          never notice the lack of it. 
+
+        - "wish", the TCL/Tk windowing shell is used in gitk to show the
+          history graphically
+
+       - "ssh" is used to push and pull over the net
index 3f69986..e2bbcb5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -76,7 +76,7 @@ SCRIPT_SH = \
        git-tag.sh git-verify-tag.sh git-whatchanged.sh git.sh \
        git-applymbox.sh git-applypatch.sh \
        git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
-       git-merge-resolve.sh
+       git-merge-resolve.sh git-grep.sh
 
 SCRIPT_PERL = \
        git-archimport.perl git-cvsimport.perl git-relink.perl \
diff --git a/cache.h b/cache.h
index dcfcbbc..1d99d68 100644 (file)
--- a/cache.h
+++ b/cache.h
  *     Your search - "port 9418" - did not match any documents.
  *
  * as www.google.com puts it.
+ *
+ * This port has been properly assigned for git use by IANA:
+ * git (Assigned-9418) [I06-050728-0001].
+ *
+ *     git  9418/tcp   git pack transfer service
+ *     git  9418/udp   git pack transfer service
+ *
+ * with Linus Torvalds <torvalds@osdl.org> as the point of
+ * contact. September 2005.
+ *
+ * See http://www.iana.org/assignments/port-numbers
  */
 #define DEFAULT_GIT_PORT 9418
 
index 4e7c57a..4a605cd 100755 (executable)
@@ -55,6 +55,7 @@ then
     git-read-tree --reset $new &&
        git-checkout-index -q -f -u -a
 else
+    git-update-index --refresh >/dev/null
     git-read-tree -m -u $old $new
 fi
 
index b78a468..f98f8db 100644 (file)
@@ -10,7 +10,7 @@ URL:          http://kernel.org/pub/software/scm/git/
 Source:        http://kernel.org/pub/software/scm/git/%{name}-%{version}.tar.gz
 BuildRequires: zlib-devel, openssl-devel, curl-devel  %{!?_without_docs:, xmlto, asciidoc > 6.0.3}
 BuildRoot:     %{_tmppath}/%{name}-%{version}-root
-Requires:      sh-utils, diffutils, rsync, rcs, python >= 2.4
+Requires:      sh-utils, curl, diffutils, rsync, rcs, openssh-clients, perl, python >= 2.4, tk
 
 %description
 This is a stupid (but extremely fast) directory content manager.  It
@@ -40,10 +40,14 @@ rm -rf $RPM_BUILD_ROOT
 %{_datadir}/git-core/templates/*
 %doc README COPYING Documentation/*.txt
 %{!?_without_docs: %doc Documentation/*.html }
-%{!?_without_docs: %{_mandir}/man1/*.1.gz}
-%{!?_without_docs: %{_mandir}/man7/*.7.gz}
+%{!?_without_docs: %{_mandir}/man1/*.1*}
+%{!?_without_docs: %{_mandir}/man7/*.7*}
 
 %changelog
+* Sun Sep 11 2005 Horst H. von Brand <vonbrand@inf.utfsm.cl>
+- Updated dependencies
+- Don't assume manpages are gzipped
+
 * Sun Aug 07 2005 Horst H. von Brand <vonbrand@inf.utfsm.cl>
 - Redid the description
 - Cut overlong make line, loosened changelog a bit
index cfba1de..525a2f2 100755 (executable)
@@ -27,8 +27,6 @@ with applymbox.
 }
 
 diff_opts=
-IFS='
-'
 LF='
 '
 
@@ -61,7 +59,10 @@ do
     --output-directo|--output-director|--output-directory)
     case "$#" in 1) usage ;; esac; shift
     outdir="$1" ;;
-    -*)        diff_opts="$diff_opts$LF$1" ;;
+    -*' '* | -*"$LF"* | -*'    '*)
+       # Ignore diff option that has whitespace for now.
+       ;;
+    -*)        diff_opts="$diff_opts$1 " ;;
     *) break ;;
     esac
     shift
@@ -72,16 +73,20 @@ tt)
        die '--keep-subject and --numbered are incompatible.' ;;
 esac
 
-revpair=
+rev1= rev2=
 case "$#" in
 2)
-    revpair="$1..$2" ;;
+    rev1="$1" rev2="$2" ;;
 1)
     case "$1" in
     *..*)
-       revpair="$1";;
+       rev1=`expr "$1" : '\(.*\)\.\.'`
+       rev2=`expr "$1" : '.*\.\.\(.*\)'`
+       ;;
     *)
-       revpair="$1..HEAD";;
+        rev1="$1"
+       rev2="HEAD"
+       ;;
     esac ;;
 *)
     usage ;;
@@ -127,10 +132,21 @@ _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
 _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
 stripCommitHead='/^'"$_x40"' (from '"$_x40"')$/d'
 
-git-rev-list --no-merges --merge-order \
-       $(git-rev-parse --revs-only "$revpair") >$series
+git-cherry -v "$rev1" "$rev2" |
+while read sign rev comment
+do
+       case "$sign" in
+       '-')
+               echo >&2 "Merged already: $comment"
+               ;;
+       *)
+               echo $rev
+               ;;
+       esac
+done >$series
+
 total=`wc -l <$series | tr -dc "[0-9]"`
-i=$total
+i=1
 while read commit
 do
     git-cat-file commit "$commit" | git-stripspace >$commsg
@@ -145,7 +161,7 @@ do
     esac
 
     file=`printf '%04d-%stxt' $i "$title"`
-    i=`expr "$i" - 1`
+    i=`expr "$i" + 1`
     echo "* $file"
     {
        mailScript='
diff --git a/git-grep.sh b/git-grep.sh
new file mode 100755 (executable)
index 0000000..51924fd
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/sh
+#
+# Copyright (c) Linus Torvalds, 2005
+#
+
+pattern=
+flags=()
+git_flags=()
+while : ; do
+       case "$1" in
+       --cached|--deleted|--others|--killed|\
+       --ignored|--exclude=*|\
+       --exclude-from=*|\--exclude-per-directory=*)
+               git_flags=("${git_flags[@]}" "$1")
+               ;;
+       -e)
+               pattern="$2"
+               shift
+               ;;
+       -A|-B|-C|-D|-d|-f|-m)
+               flags=("${flags[@]}" "$1" "$2")
+               shift
+               ;;
+       --)
+               # The rest are git-ls-files paths (or flags)
+               shift
+               break
+               ;;
+       -*)
+               flags=("${flags[@]}" "$1")
+               ;;
+       *)
+               if [ -z "$pattern" ]; then
+                       pattern="$1"
+                       shift
+               fi
+               break
+               ;;
+       esac
+       shift
+done
+git-ls-files -z "${git_flags[@]}" "$@" |
+       xargs -0 grep "${flags[@]}" "$pattern"
index 920e10f..27b8486 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-import sys, math, random, os, re, signal, tempfile, stat, errno
+import sys, math, random, os, re, signal, tempfile, stat, errno, traceback
 from heapq import heappush, heappop
 from sets import Set
 
@@ -60,7 +60,7 @@ def merge(h1, h2, branch1Name, branch2Name, graph, callDepth=0):
                                  branch1Name, branch2Name,
                                  cleanCache, updateWd)
 
-    if clean or alwaysWriteTree:
+    if clean or cleanCache:
         res = Commit(None, [h1, h2], tree=shaRes)
         graph.addNode(res)
     else:
@@ -120,9 +120,8 @@ def unmergedCacheEntries():
             e.stages[stage].mode = mode
             e.stages[stage].sha1 = sha1
         else:
-            print 'Error: Merge program failed: Unexpected output from', \
-                  'git-ls-files:', l
-            sys.exit(2)
+            die('Error: Merge program failed: Unexpected output from', \
+                'git-ls-files:', l)
     return res
 
 def mergeTrees(head, merge, common, branch1Name, branch2Name,
@@ -381,26 +380,25 @@ def processEntry(entry, branch1Name, branch2Name, files, dirs,
         os.unlink(src1)
         os.unlink(src2)
     else:
-        print 'ERROR: Fatal merge failure.'
-        print "ERROR: Shouldn't happen"
-        sys.exit(2)
+        die("ERROR: Fatal merge failure, shouldn't happen.")
 
     return cleanMerge
 
 def usage():
-    print 'Usage:', sys.argv[0], ' <base>... -- <head> <remote>..'
-    sys.exit(2)
+    die('Usage:', sys.argv[0], ' <base>... -- <head> <remote>..')
 
 # main entry point as merge strategy module
 # The first parameters up to -- are merge bases, and the rest are heads.
 # This strategy module figures out merge bases itself, so we only
 # get heads.
 
+if len(sys.argv) < 4:
+    usage()
+
 for nextArg in xrange(1, len(sys.argv)):
     if sys.argv[nextArg] == '--':
         if len(sys.argv) != nextArg + 3:
-            print 'Not handling anything other than two heads merge.'
-            sys.exit(2)
+            die('Not handling anything other than two heads merge.')
         try:
             h1 = firstBranch = sys.argv[nextArg + 1]
             h2 = secondBranch = sys.argv[nextArg + 2]
@@ -409,15 +407,20 @@ for nextArg in xrange(1, len(sys.argv)):
         break
 
 print 'Merging', h1, 'with', h2
-h1 = runProgram(['git-rev-parse', '--verify', h1 + '^0']).rstrip()
-h2 = runProgram(['git-rev-parse', '--verify', h2 + '^0']).rstrip()
 
-graph = buildGraph([h1, h2])
+try:
+    h1 = runProgram(['git-rev-parse', '--verify', h1 + '^0']).rstrip()
+    h2 = runProgram(['git-rev-parse', '--verify', h2 + '^0']).rstrip()
 
-[res, clean] = merge(graph.shaMap[h1], graph.shaMap[h2],
-                     firstBranch, secondBranch, graph)
+    graph = buildGraph([h1, h2])
 
-print ''
+    [res, clean] = merge(graph.shaMap[h1], graph.shaMap[h2],
+                         firstBranch, secondBranch, graph)
+
+    print ''
+except:
+    traceback.print_exc(None, sys.stderr)
+    sys.exit(2)
 
 if clean:
     sys.exit(0)
index dfa49ff..ce9694b 100644 (file)
@@ -10,6 +10,10 @@ if sys.version_info[0] < 2 or \
 
 import subprocess
 
+def die(*args):
+    printList(args, sys.stderr)
+    sys.exit(2)
+
 # Debugging machinery
 # -------------------
 
@@ -28,11 +32,11 @@ def debug(*args):
         if funcName in functionsToDebug:
             printList(args)
 
-def printList(list):
+def printList(list, file=sys.stdout):
     for x in list:
-        sys.stdout.write(str(x))
-        sys.stdout.write(' ')
-    sys.stdout.write('\n')
+        file.write(str(x))
+        file.write(' ')
+    file.write('\n')
 
 # Program execution
 # -----------------
@@ -42,6 +46,9 @@ class ProgramError(Exception):
         self.progStr = progStr
         self.error = error
 
+    def __str__(self):
+        return self.progStr + ': ' + self.error
+
 addDebug('runProgram')
 def runProgram(prog, input=None, returnCode=False, env=None, pipeOutput=True):
     debug('runProgram prog:', str(prog), 'input:', str(input))