Staging
v0.5.1
https://github.com/git/git
Revision a2239b79e554bab92abe47d8568cbbfe5c77ce85 authored by Junio C Hamano on 16 October 2005, 00:30:15 UTC, committed by Junio C Hamano on 16 October 2005, 01:10:02 UTC
Contains the following changes since v0.99.8c.

Johannes Schindelin:
      Teach git-status about spaces in file names also on MacOSX
      t5400-send-pack relies on a working cpio

Jonas Fonseca:
      git.sh: quote all paths

Junio C Hamano:
      Also force LC_ALL in test scripts.
      OpenBSD needs the strcasestr replacement.
      git-check-ref-format: reject funny ref names.
      Refuse to create funny refs in clone-pack, git-fetch and receive-pack.
      Ignore funny refname sent from remote
      Introduce notation "ref^{type}".

Martin Langhoff:
      cvsimport: don't pass --cvs-direct if user options contradict us

Ralf Baechle:
      rsh.c: typo fix

Note that "funny ref" bits are not strictly fixes but rather
backport from the "master" branch.  They will prevent refs and
heads with funny names from being created.  In addition, what is
in the master branch will start feeding the clients unwrapped
tag information to help Martin's findtags and possibly later
Cogito.  These backported "funny ref" changes are to prevent
clients on the "maint" branch from getting confused when talking
with newer git-upload-pack and when reading from info/refs file
prepared with newer git-update-server-info.

Signed-off-by: Junio C Hamano <junkio@cox.net>
1 parent 4baf5dd
Raw File
Tip revision: a2239b79e554bab92abe47d8568cbbfe5c77ce85 authored by Junio C Hamano on 16 October 2005, 00:30:15 UTC
GIT v0.99.8d
Tip revision: a2239b7
git-format-patch.sh
#!/bin/sh
#
# Copyright (c) 2005 Junio C Hamano
#

. git-sh-setup || die "Not a git archive."

usage () {
    echo >&2 "usage: $0"' [-n] [-o dir] [--keep-subject] [--mbox] [--check] [--signoff] [-<diff options>...] upstream [ our-head ]

Prepare each commit with its patch since our-head forked from upstream,
one file per patch, for e-mail submission.  Each output file is
numbered sequentially from 1, and uses the first line of the commit
message (massaged for pathname safety) as the filename.

When -o is specified, output files are created in that directory; otherwise in
the current working directory.

When -n is specified, instead of "[PATCH] Subject", the first line is formatted
as "[PATCH N/M] Subject", unless you have only one patch.

When --mbox is specified, the output is formatted to resemble
UNIX mailbox format, and can be concatenated together for processing
with applymbox.
'
    exit 1
}

diff_opts=
LF='
'

outdir=./
while case "$#" in 0) break;; esac
do
    case "$1" in
    -a|--a|--au|--aut|--auth|--autho|--author)
    author=t ;;
    -c|--c|--ch|--che|--chec|--check)
    check=t ;;
    -d|--d|--da|--dat|--date)
    date=t ;;
    -m|--m|--mb|--mbo|--mbox)
    date=t author=t mbox=t ;;
    -k|--k|--ke|--kee|--keep|--keep-|--keep-s|--keep-su|--keep-sub|\
    --keep-subj|--keep-subje|--keep-subjec|--keep-subject)
    keep_subject=t ;;
    -n|--n|--nu|--num|--numb|--numbe|--number|--numbere|--numbered)
    numbered=t ;;
    -s|--s|--si|--sig|--sign|--signo|--signof|--signoff)
    signoff=t ;;
    -o=*|--o=*|--ou=*|--out=*|--outp=*|--outpu=*|--output=*|--output-=*|\
    --output-d=*|--output-di=*|--output-dir=*|--output-dire=*|\
    --output-direc=*|--output-direct=*|--output-directo=*|\
    --output-director=*|--output-directory=*)
    outdir=`expr "$1" : '-[^=]*=\(.*\)'` ;;
    -o|--o|--ou|--out|--outp|--outpu|--output|--output-|--output-d|\
    --output-di|--output-dir|--output-dire|--output-direc|--output-direct|\
    --output-directo|--output-director|--output-directory)
    case "$#" in 1) usage ;; esac; shift
    outdir="$1" ;;
    -*' '* | -*"$LF"* | -*'	'*)
	# Ignore diff option that has whitespace for now.
	;;
    -*)	diff_opts="$diff_opts$1 " ;;
    *) break ;;
    esac
    shift
done

case "$keep_subject$numbered" in
tt)
	die '--keep-subject and --numbered are incompatible.' ;;
esac

rev1= rev2=
case "$#" in
2)
    rev1="$1" rev2="$2" ;;
1)
    case "$1" in
    *..*)
	rev1=`expr "$1" : '\(.*\)\.\.'`
	rev2=`expr "$1" : '.*\.\.\(.*\)'`
	;;
    *)
        rev1="$1"
	rev2="HEAD"
	;;
    esac ;;
*)
    usage ;;
esac

me=`git-var GIT_AUTHOR_IDENT | sed -e 's/>.*/>/'`

case "$outdir" in
*/) ;;
*) outdir="$outdir/" ;;
esac
test -d "$outdir" || mkdir -p "$outdir" || exit

tmp=.tmp-series$$
trap 'rm -f $tmp-*' 0 1 2 3 15

series=$tmp-series
commsg=$tmp-commsg
filelist=$tmp-files

titleScript='
	/./d
	/^$/n
	s/^\[PATCH[^]]*\] *//
	s/[^-a-z.A-Z_0-9]/-/g
        s/\.\.\.*/\./g
	s/\.*$//
	s/--*/-/g
	s/^-//
	s/-$//
	s/$/./
	p
	q
'

whosepatchScript='
/^author /{
	s/author \(.*>\) \(.*\)$/au='\''\1'\'' ad='\''\2'\''/p
	q
}'

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=1
while read commit
do
    git-cat-file commit "$commit" | git-stripspace >$commsg
    title=`sed -ne "$titleScript" <$commsg`
    case "$numbered" in
    '') num= ;;
    *)
	case $total in
	1) num= ;;
	*) num=' '`printf "%d/%d" $i $total` ;;
	esac
    esac

    file=`printf '%04d-%stxt' $i "$title"`
    i=`expr "$i" + 1`
    echo "* $file"
    {
	mailScript='
	/./d
	/^$/n'
	case "$keep_subject" in
	t)  ;;
	*)
	    mailScript="$mailScript"'
	    s|^\[PATCH[^]]*\] *||
	    s|^|[PATCH'"$num"'] |'
	    ;;
	esac
	mailScript="$mailScript"'
	s|^|Subject: |'
	case "$mbox" in
	t)
	    echo 'From nobody Mon Sep 17 00:00:00 2001' ;# UNIX "From" line
	    ;;
	esac
	eval "$(sed -ne "$whosepatchScript" $commsg)"
	test "$author,$au" = ",$me" || {
		mailScript="$mailScript"'
	a\
From: '"$au"
	}
	test "$date,$au" = ",$me" || {
		mailScript="$mailScript"'
	a\
Date: '"$ad"
	}

	mailScript="$mailScript"'
	: body
	p
	n
	b body'

	sed -ne "$mailScript" <$commsg

	test "$signoff" = "t" && {
		offsigner=`git-var GIT_COMMITTER_IDENT | sed -e 's/>.*/>/'`
		line="Signed-off-by: $offsigner"
		grep -q "^$line\$" $commsg || {
			echo
			echo "$line"
			echo
		}
	}
	echo
	echo '---'
	echo
	git-diff-tree -p $diff_opts "$commit" | git-apply --stat --summary
	echo
	git-diff-tree -p $diff_opts "$commit"

	case "$mbox" in
	t)
		echo
		;;
	esac
    } >"$outdir$file"
    case "$check" in
    t)
	# This is slightly modified from Andrew Morton's Perfect Patch.
	# Lines you introduce should not have trailing whitespace.
	# Also check for an indentation that has SP before a TAB.
        grep -n '^+\([ 	]* 	.*\|.*[ 	]\)$' "$outdir$file"

	: do not exit with non-zero because we saw no problem in the last one.
    esac
done <$series
back to top