mirror of
https://github.com/git/git.git
synced 2026-04-02 04:50:12 +02:00
Merge branch 'master' of git://repo.or.cz/alt-git
This commit is contained in:
@@ -41,7 +41,8 @@ man7dir=$(mandir)/man7
|
||||
|
||||
ASCIIDOC=asciidoc
|
||||
ASCIIDOC_EXTRA =
|
||||
MANPAGE_XSL = callouts.xsl
|
||||
MANPAGE_XSL = manpage-normal.xsl
|
||||
XMLTO_EXTRA =
|
||||
INSTALL?=install
|
||||
RM ?= rm -f
|
||||
DOC_REF = origin/man
|
||||
@@ -59,12 +60,47 @@ endif
|
||||
-include ../config.mak.autogen
|
||||
-include ../config.mak
|
||||
|
||||
#
|
||||
# For asciidoc ...
|
||||
# -7.1.2, no extra settings are needed.
|
||||
# 8.0-, set ASCIIDOC8.
|
||||
#
|
||||
|
||||
#
|
||||
# For docbook-xsl ...
|
||||
# -1.68.1, set ASCIIDOC_NO_ROFF? (based on changelog from 1.73.0)
|
||||
# 1.69.0, no extra settings are needed?
|
||||
# 1.69.1-1.71.0, set DOCBOOK_SUPPRESS_SP?
|
||||
# 1.71.1, no extra settings are needed?
|
||||
# 1.72.0, set DOCBOOK_XSL_172.
|
||||
# 1.73.0-, set ASCIIDOC_NO_ROFF
|
||||
#
|
||||
|
||||
#
|
||||
# If you had been using DOCBOOK_XSL_172 in an attempt to get rid
|
||||
# of 'the ".ft C" problem' in your generated manpages, and you
|
||||
# instead ended up with weird characters around callouts, try
|
||||
# using ASCIIDOC_NO_ROFF instead (it works fine with ASCIIDOC8).
|
||||
#
|
||||
|
||||
ifdef ASCIIDOC8
|
||||
ASCIIDOC_EXTRA += -a asciidoc7compatible
|
||||
endif
|
||||
ifdef DOCBOOK_XSL_172
|
||||
ASCIIDOC_EXTRA += -a docbook-xsl-172
|
||||
ASCIIDOC_EXTRA += -a git-asciidoc-no-roff
|
||||
MANPAGE_XSL = manpage-1.72.xsl
|
||||
else
|
||||
ifdef ASCIIDOC_NO_ROFF
|
||||
# docbook-xsl after 1.72 needs the regular XSL, but will not
|
||||
# pass-thru raw roff codes from asciidoc.conf, so turn them off.
|
||||
ASCIIDOC_EXTRA += -a git-asciidoc-no-roff
|
||||
endif
|
||||
endif
|
||||
ifdef MAN_BOLD_LITERAL
|
||||
XMLTO_EXTRA += -m manpage-bold-literal.xsl
|
||||
endif
|
||||
ifdef DOCBOOK_SUPPRESS_SP
|
||||
XMLTO_EXTRA += -m manpage-suppress-sp.xsl
|
||||
endif
|
||||
|
||||
#
|
||||
@@ -76,6 +112,32 @@ endif
|
||||
# yourself - yes, all 6 characters of it!
|
||||
#
|
||||
|
||||
QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir
|
||||
QUIET_SUBDIR1 =
|
||||
|
||||
ifneq ($(findstring $(MAKEFLAGS),w),w)
|
||||
PRINT_DIR = --no-print-directory
|
||||
else # "make -w"
|
||||
NO_SUBDIR = :
|
||||
endif
|
||||
|
||||
ifneq ($(findstring $(MAKEFLAGS),s),s)
|
||||
ifndef V
|
||||
QUIET_ASCIIDOC = @echo ' ' ASCIIDOC $@;
|
||||
QUIET_XMLTO = @echo ' ' XMLTO $@;
|
||||
QUIET_DB2TEXI = @echo ' ' DB2TEXI $@;
|
||||
QUIET_MAKEINFO = @echo ' ' MAKEINFO $@;
|
||||
QUIET_DBLATEX = @echo ' ' DBLATEX $@;
|
||||
QUIET_XSLTPROC = @echo ' ' XSLTPROC $@;
|
||||
QUIET_GEN = @echo ' ' GEN $@;
|
||||
QUIET_STDERR = 2> /dev/null
|
||||
QUIET_SUBDIR0 = +@subdir=
|
||||
QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \
|
||||
$(MAKE) $(PRINT_DIR) -C $$subdir
|
||||
export V
|
||||
endif
|
||||
endif
|
||||
|
||||
all: html man
|
||||
|
||||
html: $(DOC_HTML)
|
||||
@@ -119,7 +181,7 @@ install-html: html
|
||||
sh ./install-webdoc.sh $(DESTDIR)$(htmldir)
|
||||
|
||||
../GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
|
||||
$(MAKE) -C ../ GIT-VERSION-FILE
|
||||
$(QUIET_SUBDIR0)../ $(QUIET_SUBDIR1) GIT-VERSION-FILE
|
||||
|
||||
-include ../GIT-VERSION-FILE
|
||||
|
||||
@@ -127,8 +189,8 @@ install-html: html
|
||||
# Determine "include::" file references in asciidoc files.
|
||||
#
|
||||
doc.dep : $(wildcard *.txt) build-docdep.perl
|
||||
$(RM) $@+ $@
|
||||
$(PERL_PATH) ./build-docdep.perl >$@+
|
||||
$(QUIET_GEN)$(RM) $@+ $@ && \
|
||||
$(PERL_PATH) ./build-docdep.perl >$@+ $(QUIET_STDERR) && \
|
||||
mv $@+ $@
|
||||
|
||||
-include doc.dep
|
||||
@@ -146,91 +208,94 @@ cmds_txt = cmds-ancillaryinterrogators.txt \
|
||||
$(cmds_txt): cmd-list.made
|
||||
|
||||
cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT)
|
||||
$(RM) $@
|
||||
$(PERL_PATH) ./cmd-list.perl ../command-list.txt
|
||||
$(QUIET_GEN)$(RM) $@ && \
|
||||
$(PERL_PATH) ./cmd-list.perl ../command-list.txt $(QUIET_STDERR) && \
|
||||
date >$@
|
||||
|
||||
clean:
|
||||
$(RM) *.xml *.xml+ *.html *.html+ *.1 *.5 *.7
|
||||
$(RM) *.texi *.texi+ git.info gitman.info
|
||||
$(RM) *.texi *.texi+ *.texi++ git.info gitman.info
|
||||
$(RM) howto-index.txt howto/*.html doc.dep
|
||||
$(RM) technical/api-*.html technical/api-index.txt
|
||||
$(RM) $(cmds_txt) *.made
|
||||
|
||||
$(MAN_HTML): %.html : %.txt
|
||||
$(RM) $@+ $@
|
||||
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
|
||||
$(ASCIIDOC) -b xhtml11 -d manpage -f asciidoc.conf \
|
||||
$(ASCIIDOC_EXTRA) -agit_version=$(GIT_VERSION) -o $@+ $<
|
||||
$(ASCIIDOC_EXTRA) -agit_version=$(GIT_VERSION) -o $@+ $< && \
|
||||
mv $@+ $@
|
||||
|
||||
%.1 %.5 %.7 : %.xml
|
||||
$(RM) $@
|
||||
xmlto -m $(MANPAGE_XSL) man $<
|
||||
$(QUIET_XMLTO)$(RM) $@ && \
|
||||
xmlto -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<
|
||||
|
||||
%.xml : %.txt
|
||||
$(RM) $@+ $@
|
||||
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
|
||||
$(ASCIIDOC) -b docbook -d manpage -f asciidoc.conf \
|
||||
$(ASCIIDOC_EXTRA) -agit_version=$(GIT_VERSION) -o $@+ $<
|
||||
$(ASCIIDOC_EXTRA) -agit_version=$(GIT_VERSION) -o $@+ $< && \
|
||||
mv $@+ $@
|
||||
|
||||
user-manual.xml: user-manual.txt user-manual.conf
|
||||
$(ASCIIDOC) -b docbook -d book $<
|
||||
$(QUIET_ASCIIDOC)$(ASCIIDOC) -b docbook -d book $<
|
||||
|
||||
technical/api-index.txt: technical/api-index-skel.txt \
|
||||
technical/api-index.sh $(patsubst %,%.txt,$(API_DOCS))
|
||||
cd technical && sh ./api-index.sh
|
||||
$(QUIET_GEN)cd technical && sh ./api-index.sh
|
||||
|
||||
$(patsubst %,%.html,$(API_DOCS) technical/api-index): %.html : %.txt
|
||||
$(ASCIIDOC) -b xhtml11 -f asciidoc.conf \
|
||||
$(QUIET_ASCIIDOC)$(ASCIIDOC) -b xhtml11 -f asciidoc.conf \
|
||||
$(ASCIIDOC_EXTRA) -agit_version=$(GIT_VERSION) $*.txt
|
||||
|
||||
XSLT = docbook.xsl
|
||||
XSLTOPTS = --xinclude --stringparam html.stylesheet docbook-xsl.css
|
||||
|
||||
user-manual.html: user-manual.xml
|
||||
xsltproc $(XSLTOPTS) -o $@ $(XSLT) $<
|
||||
$(QUIET_XSLTPROC)xsltproc $(XSLTOPTS) -o $@ $(XSLT) $<
|
||||
|
||||
git.info: user-manual.texi
|
||||
$(MAKEINFO) --no-split -o $@ user-manual.texi
|
||||
$(QUIET_MAKEINFO)$(MAKEINFO) --no-split -o $@ user-manual.texi
|
||||
|
||||
user-manual.texi: user-manual.xml
|
||||
$(RM) $@+ $@
|
||||
$(DOCBOOK2X_TEXI) user-manual.xml --encoding=UTF-8 --to-stdout | \
|
||||
$(PERL_PATH) fix-texi.perl >$@+
|
||||
$(QUIET_DB2TEXI)$(RM) $@+ $@ && \
|
||||
$(DOCBOOK2X_TEXI) user-manual.xml --encoding=UTF-8 --to-stdout >$@++ && \
|
||||
$(PERL_PATH) fix-texi.perl <$@++ >$@+ && \
|
||||
rm $@++ && \
|
||||
mv $@+ $@
|
||||
|
||||
user-manual.pdf: user-manual.xml
|
||||
$(RM) $@+ $@
|
||||
$(DBLATEX) -o $@+ -p /etc/asciidoc/dblatex/asciidoc-dblatex.xsl -s /etc/asciidoc/dblatex/asciidoc-dblatex.sty $<
|
||||
$(QUIET_DBLATEX)$(RM) $@+ $@ && \
|
||||
$(DBLATEX) -o $@+ -p /etc/asciidoc/dblatex/asciidoc-dblatex.xsl -s /etc/asciidoc/dblatex/asciidoc-dblatex.sty $< && \
|
||||
mv $@+ $@
|
||||
|
||||
gitman.texi: $(MAN_XML) cat-texi.perl
|
||||
$(RM) $@+ $@
|
||||
$(QUIET_DB2TEXI)$(RM) $@+ $@ && \
|
||||
($(foreach xml,$(MAN_XML),$(DOCBOOK2X_TEXI) --encoding=UTF-8 \
|
||||
--to-stdout $(xml);)) | $(PERL_PATH) cat-texi.perl $@ >$@+
|
||||
--to-stdout $(xml) &&) true) > $@++ && \
|
||||
$(PERL_PATH) cat-texi.perl $@ <$@++ >$@+ && \
|
||||
rm $@++ && \
|
||||
mv $@+ $@
|
||||
|
||||
gitman.info: gitman.texi
|
||||
$(MAKEINFO) --no-split --no-validate $*.texi
|
||||
$(QUIET_MAKEINFO)$(MAKEINFO) --no-split --no-validate $*.texi
|
||||
|
||||
$(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml
|
||||
$(RM) $@+ $@
|
||||
$(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@+
|
||||
$(QUIET_DB2TEXI)$(RM) $@+ $@ && \
|
||||
$(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@+ && \
|
||||
mv $@+ $@
|
||||
|
||||
howto-index.txt: howto-index.sh $(wildcard howto/*.txt)
|
||||
$(RM) $@+ $@
|
||||
sh ./howto-index.sh $(wildcard howto/*.txt) >$@+
|
||||
$(QUIET_GEN)$(RM) $@+ $@ && \
|
||||
sh ./howto-index.sh $(wildcard howto/*.txt) >$@+ && \
|
||||
mv $@+ $@
|
||||
|
||||
$(patsubst %,%.html,$(ARTICLES)) : %.html : %.txt
|
||||
$(ASCIIDOC) -b xhtml11 $*.txt
|
||||
$(QUIET_ASCIIDOC)$(ASCIIDOC) -b xhtml11 $*.txt
|
||||
|
||||
WEBDOC_DEST = /pub/software/scm/git/docs
|
||||
|
||||
$(patsubst %.txt,%.html,$(wildcard howto/*.txt)): %.html : %.txt
|
||||
$(RM) $@+ $@
|
||||
sed -e '1,/^$$/d' $< | $(ASCIIDOC) -b xhtml11 - >$@+
|
||||
$(QUIET_ASCIIDOC)$(RM) $@+ $@ && \
|
||||
sed -e '1,/^$$/d' $< | $(ASCIIDOC) -b xhtml11 - >$@+ && \
|
||||
mv $@+ $@
|
||||
|
||||
install-webdoc : html
|
||||
|
||||
@@ -7,9 +7,15 @@ Fixes since v1.6.2.1
|
||||
* A longstanding confusing description of what --pickaxe option of
|
||||
git-diff does has been clarified in the documentation.
|
||||
|
||||
* "git-blame -S" did not quite work near the commits that were given
|
||||
on the command line correctly.
|
||||
|
||||
* "git diff --pickaxe-regexp" did not count overlapping matches
|
||||
correctly.
|
||||
|
||||
* "git diff" did not feed files in work-tree representation to external
|
||||
diff and textconv.
|
||||
|
||||
* "git-fetch" in a repository that was not cloned from anywhere said
|
||||
it cannot find 'origin', which was hard to understand for new people.
|
||||
|
||||
@@ -27,9 +33,13 @@ Fixes since v1.6.2.1
|
||||
* 'git-submodule add' did not tolerate extra slashes and ./ in the path it
|
||||
accepted from the command line; it now is more lenient.
|
||||
|
||||
* git-svn misbehaved when the project contained a path that began with
|
||||
two dashes.
|
||||
|
||||
---
|
||||
exec >/var/tmp/1
|
||||
O=v1.6.2.1-23-g67c176f
|
||||
echo O=$(git describe maint)
|
||||
git shortlog --no-merges $O..maint
|
||||
* import-zips script (in contrib) did not compute the common directory
|
||||
prefix correctly.
|
||||
|
||||
* miscompilation of negated enum constants by old gcc (2.9) affected the
|
||||
codepaths to spawn subprocesses.
|
||||
|
||||
Many small documentation updates are included as well.
|
||||
|
||||
@@ -62,6 +62,10 @@ Updates since v1.6.2
|
||||
with the 'edit' action in git-add -i/-p, you can abort the editor to
|
||||
tell git not to apply it.
|
||||
|
||||
* The number of commits shown in "you are ahead/behind your upstream"
|
||||
messages given by "git checkout" and "git status" used to count merge
|
||||
commits; now it doesn't.
|
||||
|
||||
* git-archive learned --output=<file> option.
|
||||
|
||||
* git-bisect shows not just the number of remaining commits whose goodness
|
||||
@@ -77,11 +81,17 @@ Updates since v1.6.2
|
||||
|
||||
* git-clone runs post-checkout hook when run without --no-checkout.
|
||||
|
||||
* git-fast-export choked when seeing a tag that does not point at commit.
|
||||
|
||||
* git-format-patch can be told to use attachment with a new configuration,
|
||||
format.attach.
|
||||
|
||||
* git-format-patch can be told to produce deep or shallow message threads.
|
||||
|
||||
* git-format-patch learned format.headers configuration to add extra
|
||||
header fields to the output. This behaviour is similar to the existing
|
||||
--add-header=<header> option of the command.
|
||||
|
||||
* git-grep learned to highlight the found substrings in color.
|
||||
|
||||
* git-imap-send learned to work around Thunderbird's inability to easily
|
||||
@@ -95,6 +105,11 @@ Updates since v1.6.2
|
||||
|
||||
* Output from git-remote command has been vastly improved.
|
||||
|
||||
* git-repack (invoked from git-gc) did not work as nicely as it should in
|
||||
a repository that borrows objects from neighbours via alternates
|
||||
mechanism especially when some packs are marked with the ".keep" flag
|
||||
to prevent them from being repacked.
|
||||
|
||||
* git-send-email learned --confirm option to review the Cc: list before
|
||||
sending the messages out.
|
||||
|
||||
@@ -107,6 +122,13 @@ Updates since v1.6.2
|
||||
* Makefile learned 'coverage' option to run the test suites with
|
||||
coverage tracking enabled.
|
||||
|
||||
* Building the manpages with docbook-xsl between 1.69.1 and 1.71.1 now
|
||||
requires setting DOCBOOK_SUPPRESS_SP to work around a docbook-xsl bug.
|
||||
This workaround used to be enabled by default, but causes problems
|
||||
with newer versions of docbook-xsl. In addition, there are a few more
|
||||
knobs you can tweak to work around issues with various versions of the
|
||||
docbook-xsl package. See comments in Documentation/Makefile for details.
|
||||
|
||||
Fixes since v1.6.2
|
||||
------------------
|
||||
|
||||
@@ -116,20 +138,14 @@ release, unless otherwise noted.
|
||||
Here are fixes that this release has, but have not been backported to
|
||||
v1.6.2.X series.
|
||||
|
||||
* "git-blame -S" did not quite work near the commits that were given
|
||||
on the command line correctly (jc/maint-1.6.0-blame-s).
|
||||
|
||||
* The initial checkout did not read the attributes from the .gitattribute
|
||||
file that is being checked out.
|
||||
|
||||
* git-diff feeds files in work-tree representation to external diff and
|
||||
textconv (js/maint-diff-temp-smudge).
|
||||
|
||||
* git-gc spent excessive amount of time to decide if an object appears
|
||||
in a locally existing pack (if needed, backport by merging 69e020a).
|
||||
|
||||
---
|
||||
exec >/var/tmp/1
|
||||
O=v1.6.2.1-399-gaa72a14
|
||||
O=v1.6.2.2-403-g8130949
|
||||
echo O=$(git describe master)
|
||||
git shortlog --no-merges $O..master ^maint
|
||||
|
||||
@@ -27,7 +27,7 @@ ifdef::backend-docbook[]
|
||||
endif::backend-docbook[]
|
||||
|
||||
ifdef::backend-docbook[]
|
||||
ifndef::docbook-xsl-172[]
|
||||
ifndef::git-asciidoc-no-roff[]
|
||||
# "unbreak" docbook-xsl v1.68 for manpages. v1.69 works with or without this.
|
||||
# v1.72 breaks with this because it replaces dots not in roff requests.
|
||||
[listingblock]
|
||||
@@ -42,16 +42,16 @@ ifdef::doctype-manpage[]
|
||||
endif::doctype-manpage[]
|
||||
</literallayout>
|
||||
{title#}</example>
|
||||
endif::docbook-xsl-172[]
|
||||
endif::git-asciidoc-no-roff[]
|
||||
|
||||
ifdef::docbook-xsl-172[]
|
||||
ifdef::git-asciidoc-no-roff[]
|
||||
ifdef::doctype-manpage[]
|
||||
# The following two small workarounds insert a simple paragraph after screen
|
||||
[listingblock]
|
||||
<example><title>{title}</title>
|
||||
<screen>
|
||||
<literallayout>
|
||||
|
|
||||
</screen><simpara></simpara>
|
||||
</literallayout><simpara></simpara>
|
||||
{title#}</example>
|
||||
|
||||
[verseblock]
|
||||
@@ -59,10 +59,11 @@ ifdef::doctype-manpage[]
|
||||
{title%}<literallayout{id? id="{id}"}>
|
||||
{title#}<literallayout>
|
||||
|
|
||||
</literallayout><simpara></simpara>
|
||||
</literallayout>
|
||||
{title#}</para></formalpara>
|
||||
{title%}<simpara></simpara>
|
||||
endif::doctype-manpage[]
|
||||
endif::docbook-xsl-172[]
|
||||
endif::git-asciidoc-no-roff[]
|
||||
endif::backend-docbook[]
|
||||
|
||||
ifdef::doctype-manpage[]
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
<!-- callout.xsl: converts asciidoc callouts to man page format -->
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
||||
<xsl:template match="co">
|
||||
<xsl:value-of select="concat('\fB(',substring-after(@id,'-'),')\fR')"/>
|
||||
</xsl:template>
|
||||
<xsl:template match="calloutlist">
|
||||
<xsl:text>.sp </xsl:text>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:template>
|
||||
<xsl:template match="callout">
|
||||
<xsl:value-of select="concat('\fB',substring-after(@arearefs,'-'),'. \fR')"/>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:text>.br </xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<!-- sorry, this is not about callouts, but attempts to work around
|
||||
spurious .sp at the tail of the line docbook stylesheets seem to add -->
|
||||
<xsl:template match="simpara">
|
||||
<xsl:variable name="content">
|
||||
<xsl:apply-templates/>
|
||||
</xsl:variable>
|
||||
<xsl:value-of select="normalize-space($content)"/>
|
||||
<xsl:if test="not(ancestor::authorblurb) and
|
||||
not(ancestor::personblurb)">
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
@@ -473,10 +473,14 @@ branch.autosetuprebase::
|
||||
This option defaults to never.
|
||||
|
||||
branch.<name>.remote::
|
||||
When in branch <name>, it tells 'git-fetch' which remote to fetch.
|
||||
If this option is not given, 'git-fetch' defaults to remote "origin".
|
||||
When in branch <name>, it tells 'git-fetch' and 'git-push' which
|
||||
remote to fetch from/push to. It defaults to `origin` if no remote is
|
||||
configured. `origin` is also used if you are not on any branch.
|
||||
|
||||
branch.<name>.merge::
|
||||
Defines, together with branch.<name>.remote, the upstream branch
|
||||
for the given branch. It tells 'git-fetch'/'git-pull' which
|
||||
branch to merge from.
|
||||
When in branch <name>, it tells 'git-fetch' the default
|
||||
refspec to be marked for merging in FETCH_HEAD. The value is
|
||||
handled like the remote part of a refspec, and must match a
|
||||
@@ -1198,19 +1202,14 @@ push.default::
|
||||
Defines the action git push should take if no refspec is given
|
||||
on the command line, no refspec is configured in the remote, and
|
||||
no refspec is implied by any of the options given on the command
|
||||
line.
|
||||
+
|
||||
The term `current remote` means the remote configured for the current
|
||||
branch, or `origin` if no remote is configured. `origin` is also used
|
||||
if you are not on any branch. Possible values are:
|
||||
line. Possible values are:
|
||||
+
|
||||
* `nothing` do not push anything.
|
||||
* `matching` push all matching branches to the current remote.
|
||||
* `matching` push all matching branches.
|
||||
All branches having the same name in both ends are considered to be
|
||||
matching. This is the current default value.
|
||||
matching. This is the default.
|
||||
* `tracking` push the current branch to the branch it is tracking.
|
||||
* `current` push the current branch to a branch of the same name on the
|
||||
current remote.
|
||||
* `current` push the current branch to a branch of the same name.
|
||||
|
||||
rebase.stat::
|
||||
Whether to show a diffstat of what changed upstream since the last
|
||||
|
||||
@@ -117,7 +117,7 @@ then the cloned repository will become corrupt.
|
||||
--origin <name>::
|
||||
-o <name>::
|
||||
Instead of using the remote name 'origin' to keep track
|
||||
of the upstream repository, use <name> instead.
|
||||
of the upstream repository, use <name>.
|
||||
|
||||
--upload-pack <upload-pack>::
|
||||
-u <upload-pack>::
|
||||
|
||||
@@ -173,24 +173,26 @@ ISSUES
|
||||
Problems related to timestamps:
|
||||
|
||||
* If timestamps of commits in the cvs repository are not stable enough
|
||||
to be used for ordering commits
|
||||
to be used for ordering commits changes may show up in the wrong
|
||||
order.
|
||||
* If any files were ever "cvs import"ed more than once (e.g., import of
|
||||
more than one vendor release)
|
||||
more than one vendor release) the HEAD contains the wrong content.
|
||||
* If the timestamp order of different files cross the revision order
|
||||
within the commit matching time window
|
||||
within the commit matching time window the order of commits may be
|
||||
wrong.
|
||||
|
||||
Problems related to branches:
|
||||
|
||||
* Branches on which no commits have been made are not imported
|
||||
* Branches on which no commits have been made are not imported.
|
||||
* All files from the branching point are added to a branch even if
|
||||
never added in cvs
|
||||
* files added to the source branch *after* a daughter branch was
|
||||
created: If previously no commit was made on the daugther branch they
|
||||
will erroneously be added to the daughter branch in git
|
||||
never added in cvs.
|
||||
* This applies to files added to the source branch *after* a daughter
|
||||
branch was created: if previously no commit was made on the daughter
|
||||
branch they will erroneously be added to the daughter branch in git.
|
||||
|
||||
Problems related to tags:
|
||||
|
||||
* Multiple tags on the same revision are not imported
|
||||
* Multiple tags on the same revision are not imported.
|
||||
|
||||
If you suspect that any of these issues may apply to the repository you
|
||||
want to import consider using these alternative tools which proved to be
|
||||
|
||||
@@ -40,15 +40,11 @@ There are two ways to specify which commits to operate on.
|
||||
REVISIONS" section in linkgit:git-rev-parse[1]) means the
|
||||
commits in the specified range.
|
||||
|
||||
A single commit, when interpreted as a <revision range>
|
||||
expression, means "everything that leads to that commit", but
|
||||
if you write 'git format-patch <commit>', the previous rule
|
||||
applies to that command line and you do not get "everything
|
||||
since the beginning of the time". If you want to format
|
||||
everything since project inception to one commit, say "git
|
||||
format-patch \--root <commit>" to make it clear that it is the
|
||||
latter case. If you want to format a single commit, you can do
|
||||
this with "git format-patch -1 <commit>".
|
||||
The first rule takes precedence in the case of a single <commit>. To
|
||||
apply the second rule, i.e., format everything since the beginning of
|
||||
history up until <commit>, use the '\--root' option: "git format-patch
|
||||
\--root <commit>". If you want to format only <commit> itself, you
|
||||
can do this with "git format-patch -1 <commit>".
|
||||
|
||||
By default, each output file is numbered sequentially from 1, and uses the
|
||||
first line of the commit message (massaged for pathname safety) as
|
||||
@@ -161,6 +157,11 @@ if that is not set.
|
||||
Add a "Cc:" header to the email headers. This is in addition
|
||||
to any configured headers, and may be used multiple times.
|
||||
|
||||
--add-header=<header>::
|
||||
Add an arbitrary header to the email headers. This is in addition
|
||||
to any configured headers, and may be used multiple times.
|
||||
For example, --add-header="Organization: git-foo"
|
||||
|
||||
--cover-letter::
|
||||
In addition to the patches, generate a cover letter file
|
||||
containing the shortlog and the overall diffstat. You can
|
||||
@@ -182,6 +183,13 @@ not add any suffix.
|
||||
applied. By default the contents of changes in those files are
|
||||
encoded in the patch.
|
||||
|
||||
--root::
|
||||
Treat the revision argument as a <revision range>, even if it
|
||||
is just a single commit (that would normally be treated as a
|
||||
<since>). Note that root commits included in the specified
|
||||
range are always formatted as creation patches, independently
|
||||
of this flag.
|
||||
|
||||
CONFIGURATION
|
||||
-------------
|
||||
You can specify extra mail header lines to be added to each message
|
||||
|
||||
@@ -385,7 +385,8 @@ config key: svn.authorsfile
|
||||
|
||||
-q::
|
||||
--quiet::
|
||||
Make 'git-svn' less verbose.
|
||||
Make 'git-svn' less verbose. Specify a second time to make it
|
||||
even less verbose.
|
||||
|
||||
--repack[=<n>]::
|
||||
--repack-flags=<flags>::
|
||||
@@ -672,9 +673,9 @@ listed below are allowed:
|
||||
------------------------------------------------------------------------
|
||||
[svn-remote "project-a"]
|
||||
url = http://server.org/svn
|
||||
fetch = trunk/project-a:refs/remotes/project-a/trunk
|
||||
branches = branches/*/project-a:refs/remotes/project-a/branches/*
|
||||
tags = tags/*/project-a:refs/remotes/project-a/tags/*
|
||||
trunk = trunk/project-a:refs/remotes/project-a/trunk
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Keep in mind that the '*' (asterisk) wildcard of the local ref
|
||||
|
||||
@@ -63,6 +63,7 @@ OPTIONS
|
||||
are printed when using -l.
|
||||
The default is not to print any annotation lines.
|
||||
If no number is given to `-n`, only the first line is printed.
|
||||
If the tag is not annotated, the commit message is displayed instead.
|
||||
|
||||
-l <pattern>::
|
||||
List tags with names that match the given pattern (or all if no pattern is given).
|
||||
|
||||
@@ -1,21 +1,14 @@
|
||||
<!-- Based on callouts.xsl. Fixes man page callouts for DocBook 1.72 XSL -->
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
||||
<!-- manpage-1.72.xsl:
|
||||
special settings for manpages rendered from asciidoc+docbook
|
||||
handles peculiarities in docbook-xsl 1.72.0 -->
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0">
|
||||
|
||||
<xsl:param name="man.output.quietly" select="1"/>
|
||||
<xsl:param name="refentry.meta.get.quietly" select="1"/>
|
||||
<xsl:import href="manpage-base.xsl"/>
|
||||
|
||||
<xsl:template match="co">
|
||||
<xsl:value-of select="concat('▓fB(',substring-after(@id,'-'),')▓fR')"/>
|
||||
</xsl:template>
|
||||
<xsl:template match="calloutlist">
|
||||
<xsl:text>⌂sp </xsl:text>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:template>
|
||||
<xsl:template match="callout">
|
||||
<xsl:value-of select="concat('▓fB',substring-after(@arearefs,'-'),'. ▓fR')"/>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:text>⌂br </xsl:text>
|
||||
</xsl:template>
|
||||
<!-- these are the special values for the roff control characters
|
||||
needed for docbook-xsl 1.72.0 -->
|
||||
<xsl:param name="git.docbook.backslash">▓</xsl:param>
|
||||
<xsl:param name="git.docbook.dot" >⌂</xsl:param>
|
||||
|
||||
</xsl:stylesheet>
|
||||
|
||||
35
Documentation/manpage-base.xsl
Normal file
35
Documentation/manpage-base.xsl
Normal file
@@ -0,0 +1,35 @@
|
||||
<!-- manpage-base.xsl:
|
||||
special formatting for manpages rendered from asciidoc+docbook -->
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0">
|
||||
|
||||
<!-- these params silence some output from xmlto -->
|
||||
<xsl:param name="man.output.quietly" select="1"/>
|
||||
<xsl:param name="refentry.meta.get.quietly" select="1"/>
|
||||
|
||||
<!-- convert asciidoc callouts to man page format;
|
||||
git.docbook.backslash and git.docbook.dot params
|
||||
must be supplied by another XSL file or other means -->
|
||||
<xsl:template match="co">
|
||||
<xsl:value-of select="concat(
|
||||
$git.docbook.backslash,'fB(',
|
||||
substring-after(@id,'-'),')',
|
||||
$git.docbook.backslash,'fR')"/>
|
||||
</xsl:template>
|
||||
<xsl:template match="calloutlist">
|
||||
<xsl:value-of select="$git.docbook.dot"/>
|
||||
<xsl:text>sp </xsl:text>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:template>
|
||||
<xsl:template match="callout">
|
||||
<xsl:value-of select="concat(
|
||||
$git.docbook.backslash,'fB',
|
||||
substring-after(@arearefs,'-'),
|
||||
'. ',$git.docbook.backslash,'fR')"/>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:value-of select="$git.docbook.dot"/>
|
||||
<xsl:text>br </xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
17
Documentation/manpage-bold-literal.xsl
Normal file
17
Documentation/manpage-bold-literal.xsl
Normal file
@@ -0,0 +1,17 @@
|
||||
<!-- manpage-bold-literal.xsl:
|
||||
special formatting for manpages rendered from asciidoc+docbook -->
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0">
|
||||
|
||||
<!-- render literal text as bold (instead of plain or monospace);
|
||||
this makes literal text easier to distinguish in manpages
|
||||
viewed on a tty -->
|
||||
<xsl:template match="literal">
|
||||
<xsl:value-of select="$git.docbook.backslash"/>
|
||||
<xsl:text>fB</xsl:text>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:value-of select="$git.docbook.backslash"/>
|
||||
<xsl:text>fR</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
13
Documentation/manpage-normal.xsl
Normal file
13
Documentation/manpage-normal.xsl
Normal file
@@ -0,0 +1,13 @@
|
||||
<!-- manpage-normal.xsl:
|
||||
special settings for manpages rendered from asciidoc+docbook
|
||||
handles anything we want to keep away from docbook-xsl 1.72.0 -->
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0">
|
||||
|
||||
<xsl:import href="manpage-base.xsl"/>
|
||||
|
||||
<!-- these are the normal values for the roff control characters -->
|
||||
<xsl:param name="git.docbook.backslash">\</xsl:param>
|
||||
<xsl:param name="git.docbook.dot" >.</xsl:param>
|
||||
|
||||
</xsl:stylesheet>
|
||||
21
Documentation/manpage-suppress-sp.xsl
Normal file
21
Documentation/manpage-suppress-sp.xsl
Normal file
@@ -0,0 +1,21 @@
|
||||
<!-- manpage-suppress-sp.xsl:
|
||||
special settings for manpages rendered from asciidoc+docbook
|
||||
handles erroneous, inline .sp in manpage output of some
|
||||
versions of docbook-xsl -->
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0">
|
||||
|
||||
<!-- attempt to work around spurious .sp at the tail of the line
|
||||
that some versions of docbook stylesheets seem to add -->
|
||||
<xsl:template match="simpara">
|
||||
<xsl:variable name="content">
|
||||
<xsl:apply-templates/>
|
||||
</xsl:variable>
|
||||
<xsl:value-of select="normalize-space($content)"/>
|
||||
<xsl:if test="not(ancestor::authorblurb) and
|
||||
not(ancestor::personblurb)">
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
@@ -148,22 +148,22 @@ outputting that information, if desired.
|
||||
------------
|
||||
*
|
||||
*
|
||||
M
|
||||
*
|
||||
|\
|
||||
* |
|
||||
| | *
|
||||
| \ \
|
||||
| \ \
|
||||
M-. \ \
|
||||
*-. \ \
|
||||
|\ \ \ \
|
||||
| | * | |
|
||||
| | | | | *
|
||||
| | | | | *
|
||||
| | | | | M
|
||||
| | | | | *
|
||||
| | | | | |\
|
||||
| | | | | | *
|
||||
| * | | | | |
|
||||
| | | | | M \
|
||||
| | | | | * \
|
||||
| | | | | |\ |
|
||||
| | | | * | | |
|
||||
| | | | * | | |
|
||||
|
||||
@@ -270,7 +270,7 @@ static const struct ref *clone_local(const char *src_repo,
|
||||
|
||||
static const char *junk_work_tree;
|
||||
static const char *junk_git_dir;
|
||||
pid_t junk_pid;
|
||||
static pid_t junk_pid;
|
||||
|
||||
static void remove_junk(void)
|
||||
{
|
||||
@@ -406,7 +406,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
atexit(remove_junk);
|
||||
sigchain_push_common(remove_junk_on_signal);
|
||||
|
||||
setenv(CONFIG_ENVIRONMENT, xstrdup(mkpath("%s/config", git_dir)), 1);
|
||||
setenv(CONFIG_ENVIRONMENT, mkpath("%s/config", git_dir), 1);
|
||||
|
||||
if (safe_create_leading_directories_const(git_dir) < 0)
|
||||
die("could not create leading directories of '%s'", git_dir);
|
||||
|
||||
@@ -363,7 +363,10 @@ static void get_tags_and_duplicates(struct object_array *pending,
|
||||
break;
|
||||
case OBJ_TAG:
|
||||
tag = (struct tag *)e->item;
|
||||
|
||||
/* handle nested tags */
|
||||
while (tag && tag->object.type == OBJ_TAG) {
|
||||
parse_object(tag->object.sha1);
|
||||
string_list_append(full_name, extra_refs)->util = tag;
|
||||
tag = (struct tag *)tag->tagged;
|
||||
}
|
||||
@@ -376,11 +379,17 @@ static void get_tags_and_duplicates(struct object_array *pending,
|
||||
case OBJ_BLOB:
|
||||
handle_object(tag->object.sha1);
|
||||
continue;
|
||||
default: /* OBJ_TAG (nested tags) is already handled */
|
||||
warning("Tag points to object of unexpected type %s, skipping.",
|
||||
typename(tag->object.type));
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
die ("Unexpected object of type %s",
|
||||
typename(e->item->type));
|
||||
warning("%s: Unexpected object of type %s, skipping.",
|
||||
e->name,
|
||||
typename(e->item->type));
|
||||
continue;
|
||||
}
|
||||
if (commit->util)
|
||||
/* more than one name for the same object */
|
||||
|
||||
@@ -918,6 +918,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||
cover_letter = 1;
|
||||
else if (!strcmp(argv[i], "--no-binary"))
|
||||
no_binary_diff = 1;
|
||||
else if (!prefixcmp(argv[i], "--add-header="))
|
||||
add_header(argv[i] + 13);
|
||||
else
|
||||
argv[j++] = argv[i];
|
||||
}
|
||||
|
||||
@@ -1966,7 +1966,7 @@ static void add_objects_in_unpacked_packs(struct rev_info *revs)
|
||||
const unsigned char *sha1;
|
||||
struct object *o;
|
||||
|
||||
if (p->pack_keep)
|
||||
if (!p->pack_local || p->pack_keep)
|
||||
continue;
|
||||
if (open_pack_index(p))
|
||||
die("cannot open pack index");
|
||||
@@ -1995,6 +1995,29 @@ static void add_objects_in_unpacked_packs(struct rev_info *revs)
|
||||
free(in_pack.array);
|
||||
}
|
||||
|
||||
static int has_sha1_pack_kept_or_nonlocal(const unsigned char *sha1)
|
||||
{
|
||||
static struct packed_git *last_found = (void *)1;
|
||||
struct packed_git *p;
|
||||
|
||||
p = (last_found != (void *)1) ? last_found : packed_git;
|
||||
|
||||
while (p) {
|
||||
if ((!p->pack_local || p->pack_keep) &&
|
||||
find_pack_entry_one(sha1, p)) {
|
||||
last_found = p;
|
||||
return 1;
|
||||
}
|
||||
if (p == last_found)
|
||||
p = packed_git;
|
||||
else
|
||||
p = p->next;
|
||||
if (p == last_found)
|
||||
p = p->next;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void loosen_unused_packed_objects(struct rev_info *revs)
|
||||
{
|
||||
struct packed_git *p;
|
||||
@@ -2002,7 +2025,7 @@ static void loosen_unused_packed_objects(struct rev_info *revs)
|
||||
const unsigned char *sha1;
|
||||
|
||||
for (p = packed_git; p; p = p->next) {
|
||||
if (p->pack_keep)
|
||||
if (!p->pack_local || p->pack_keep)
|
||||
continue;
|
||||
|
||||
if (open_pack_index(p))
|
||||
@@ -2010,7 +2033,8 @@ static void loosen_unused_packed_objects(struct rev_info *revs)
|
||||
|
||||
for (i = 0; i < p->num_objects; i++) {
|
||||
sha1 = nth_packed_object_sha1(p, i);
|
||||
if (!locate_object_entry(sha1))
|
||||
if (!locate_object_entry(sha1) &&
|
||||
!has_sha1_pack_kept_or_nonlocal(sha1))
|
||||
if (force_object_loose(sha1, p->mtime))
|
||||
die("unable to force loose object");
|
||||
}
|
||||
@@ -2200,7 +2224,6 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
|
||||
continue;
|
||||
}
|
||||
if (!strcmp("--unpacked", arg) ||
|
||||
!strcmp("--kept-pack-only", arg) ||
|
||||
!strcmp("--reflog", arg) ||
|
||||
!strcmp("--all", arg)) {
|
||||
use_internal_rev_list = 1;
|
||||
|
||||
1
cache.h
1
cache.h
@@ -655,7 +655,6 @@ extern int check_sha1_signature(const unsigned char *sha1, void *buf, unsigned l
|
||||
extern int move_temp_to_file(const char *tmpfile, const char *filename);
|
||||
|
||||
extern int has_sha1_pack(const unsigned char *sha1);
|
||||
extern int has_sha1_kept_pack(const unsigned char *sha1);
|
||||
extern int has_sha1_file(const unsigned char *sha1);
|
||||
extern int has_loose_object_nonlocal(const unsigned char *sha1);
|
||||
|
||||
|
||||
@@ -1103,7 +1103,7 @@ _git_log ()
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
local g="$(git rev-parse --git-dir 2>/dev/null)"
|
||||
local merge=""
|
||||
if [ -f $g/MERGE_HEAD ]; then
|
||||
if [ -f "$g/MERGE_HEAD" ]; then
|
||||
merge="--merge"
|
||||
fi
|
||||
case "$cur" in
|
||||
@@ -1943,7 +1943,7 @@ _gitk ()
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
local g="$(__gitdir)"
|
||||
local merge=""
|
||||
if [ -f $g/MERGE_HEAD ]; then
|
||||
if [ -f "$g/MERGE_HEAD" ]; then
|
||||
merge="--merge"
|
||||
fi
|
||||
case "$cur" in
|
||||
|
||||
@@ -44,7 +44,8 @@ for zipfile in argv[1:]:
|
||||
common_prefix = name[:name.rfind('/') + 1]
|
||||
else:
|
||||
while not name.startswith(common_prefix):
|
||||
common_prefix = name[:name.rfind('/') + 1]
|
||||
last_slash = common_prefix[:-1].rfind('/') + 1
|
||||
common_prefix = common_prefix[:last_slash]
|
||||
|
||||
mark[name] = ':' + str(next_mark)
|
||||
next_mark += 1
|
||||
|
||||
@@ -71,11 +71,7 @@ case ",$all_into_one," in
|
||||
existing="$existing $e"
|
||||
fi
|
||||
done
|
||||
if test -n "$existing"
|
||||
then
|
||||
args="--kept-pack-only"
|
||||
fi
|
||||
if test -n "$args" -a -n "$unpack_unreachable" -a \
|
||||
if test -n "$existing" -a -n "$unpack_unreachable" -a \
|
||||
-n "$remove_redundant"
|
||||
then
|
||||
args="$args $unpack_unreachable"
|
||||
|
||||
@@ -606,32 +606,43 @@ EOT
|
||||
do_edit(@files);
|
||||
}
|
||||
|
||||
sub ask {
|
||||
my ($prompt, %arg) = @_;
|
||||
my $valid_re = $arg{valid_re} || ""; # "" matches anything
|
||||
my $default = $arg{default};
|
||||
my $resp;
|
||||
my $i = 0;
|
||||
return defined $default ? $default : undef
|
||||
unless defined $term->IN and defined fileno($term->IN) and
|
||||
defined $term->OUT and defined fileno($term->OUT);
|
||||
while ($i++ < 10) {
|
||||
$resp = $term->readline($prompt);
|
||||
if (!defined $resp) { # EOF
|
||||
print "\n";
|
||||
return defined $default ? $default : undef;
|
||||
}
|
||||
if ($resp eq '' and defined $default) {
|
||||
return $default;
|
||||
}
|
||||
if ($resp =~ /$valid_re/) {
|
||||
return $resp;
|
||||
}
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
my $prompting = 0;
|
||||
if (!defined $sender) {
|
||||
$sender = $repoauthor || $repocommitter || '';
|
||||
|
||||
while (1) {
|
||||
$_ = $term->readline("Who should the emails appear to be from? [$sender] ");
|
||||
last if defined $_;
|
||||
print "\n";
|
||||
}
|
||||
|
||||
$sender = $_ if ($_);
|
||||
$sender = ask("Who should the emails appear to be from? [$sender] ",
|
||||
default => $sender);
|
||||
print "Emails will be sent from: ", $sender, "\n";
|
||||
$prompting++;
|
||||
}
|
||||
|
||||
if (!@to) {
|
||||
|
||||
|
||||
while (1) {
|
||||
$_ = $term->readline("Who should the emails be sent to? ", "");
|
||||
last if defined $_;
|
||||
print "\n";
|
||||
}
|
||||
|
||||
my $to = $_;
|
||||
push @to, parse_address_line($to);
|
||||
my $to = ask("Who should the emails be sent to? ");
|
||||
push @to, parse_address_line($to) if defined $to; # sanitized/validated later
|
||||
$prompting++;
|
||||
}
|
||||
|
||||
@@ -651,13 +662,8 @@ sub expand_aliases {
|
||||
@bcclist = expand_aliases(@bcclist);
|
||||
|
||||
if ($thread && !defined $initial_reply_to && $prompting) {
|
||||
while (1) {
|
||||
$_= $term->readline("Message-ID to be used as In-Reply-To for the first email? ", $initial_reply_to);
|
||||
last if defined $_;
|
||||
print "\n";
|
||||
}
|
||||
|
||||
$initial_reply_to = $_;
|
||||
$initial_reply_to = ask(
|
||||
"Message-ID to be used as In-Reply-To for the first email? ");
|
||||
}
|
||||
if (defined $initial_reply_to) {
|
||||
$initial_reply_to =~ s/^\s*<?//;
|
||||
@@ -681,7 +687,7 @@ if ($compose && $compose > 0) {
|
||||
|
||||
# Variables we set as part of the loop over files
|
||||
our ($message_id, %mail, $subject, $reply_to, $references, $message,
|
||||
$needs_confirm, $message_num);
|
||||
$needs_confirm, $message_num, $ask_default);
|
||||
|
||||
sub extract_valid_address {
|
||||
my $address = shift;
|
||||
@@ -770,12 +776,13 @@ sub sanitize_address
|
||||
}
|
||||
|
||||
# if recipient_name is already quoted, do nothing
|
||||
if ($recipient_name =~ /^(".*"|=\?utf-8\?q\?.*\?=)$/) {
|
||||
if ($recipient_name =~ /^("[[:ascii:]]*"|=\?utf-8\?q\?.*\?=)$/) {
|
||||
return $recipient;
|
||||
}
|
||||
|
||||
# rfc2047 is needed if a non-ascii char is included
|
||||
if ($recipient_name =~ /[^[:ascii:]]/) {
|
||||
$recipient_name =~ s/^"(.*)"$/$1/;
|
||||
$recipient_name = quote_rfc2047($recipient_name);
|
||||
}
|
||||
|
||||
@@ -841,6 +848,7 @@ X-Mailer: git-send-email $gitversion
|
||||
print "\n$header\n";
|
||||
if ($needs_confirm eq "inform") {
|
||||
$confirm_unconfigured = 0; # squelch this message for the rest of this run
|
||||
$ask_default = "y"; # assume yes on EOF since user hasn't explicitly asked for confirmation
|
||||
print " The Cc list above has been expanded by additional\n";
|
||||
print " addresses found in the patch commit message. By default\n";
|
||||
print " send-email prompts before sending whenever this occurs.\n";
|
||||
@@ -851,13 +859,10 @@ X-Mailer: git-send-email $gitversion
|
||||
print " To retain the current behavior, but squelch this message,\n";
|
||||
print " run 'git config --global sendemail.confirm auto'.\n\n";
|
||||
}
|
||||
while (1) {
|
||||
chomp ($_ = $term->readline(
|
||||
"Send this email? ([y]es|[n]o|[q]uit|[a]ll): "
|
||||
));
|
||||
last if /^(?:yes|y|no|n|quit|q|all|a)/i;
|
||||
print "\n";
|
||||
}
|
||||
$_ = ask("Send this email? ([y]es|[n]o|[q]uit|[a]ll): ",
|
||||
valid_re => qr/^(?:yes|y|no|n|quit|q|all|a)/i,
|
||||
default => $ask_default);
|
||||
die "Send this email reply required" unless defined $_;
|
||||
if (/^n/i) {
|
||||
return;
|
||||
} elsif (/^q/i) {
|
||||
|
||||
24
git-svn.perl
24
git-svn.perl
@@ -68,6 +68,7 @@ my ($_stdin, $_help, $_edit,
|
||||
$_prefix, $_no_checkout, $_url, $_verbose,
|
||||
$_git_format, $_commit_url, $_tag);
|
||||
$Git::SVN::_follow_parent = 1;
|
||||
$_q ||= 0;
|
||||
my %remote_opts = ( 'username=s' => \$Git::SVN::Prompt::_username,
|
||||
'config-dir=s' => \$Git::SVN::Ra::config_dir,
|
||||
'no-auth-cache' => \$Git::SVN::Prompt::_no_auth_cache,
|
||||
@@ -80,7 +81,7 @@ my %fc_opts = ( 'follow-parent|follow!' => \$Git::SVN::_follow_parent,
|
||||
'useSvnsyncProps' => \$Git::SVN::_use_svnsync_props,
|
||||
'log-window-size=i' => \$Git::SVN::Ra::_log_window_size,
|
||||
'no-checkout' => \$_no_checkout,
|
||||
'quiet|q' => \$_q,
|
||||
'quiet|q+' => \$_q,
|
||||
'repack-flags|repack-args|repack-opts=s' =>
|
||||
\$Git::SVN::_repack_flags,
|
||||
'use-log-author' => \$Git::SVN::_use_log_author,
|
||||
@@ -2331,13 +2332,13 @@ sub do_git_commit {
|
||||
|
||||
$self->{last_rev} = $log_entry->{revision};
|
||||
$self->{last_commit} = $commit;
|
||||
print "r$log_entry->{revision}";
|
||||
print "r$log_entry->{revision}" unless $::_q > 1;
|
||||
if (defined $log_entry->{svm_revision}) {
|
||||
print " (\@$log_entry->{svm_revision})";
|
||||
print " (\@$log_entry->{svm_revision})" unless $::_q > 1;
|
||||
$self->rev_map_set($log_entry->{svm_revision}, $commit,
|
||||
0, $self->svm_uuid);
|
||||
}
|
||||
print " = $commit ($self->{ref_id})\n";
|
||||
print " = $commit ($self->{ref_id})\n" unless $::_q > 1;
|
||||
if (--$_gc_nr == 0) {
|
||||
$_gc_nr = $_gc_period;
|
||||
gc();
|
||||
@@ -3387,15 +3388,18 @@ sub delete_entry {
|
||||
return undef if ($gpath eq '');
|
||||
|
||||
# remove entire directories.
|
||||
if (command('ls-tree', $self->{c}, '--', $gpath) =~ /^040000 tree/) {
|
||||
my ($tree) = (command('ls-tree', '-z', $self->{c}, "./$gpath")
|
||||
=~ /\A040000 tree ([a-f\d]{40})\t\Q$gpath\E\0/);
|
||||
if ($tree) {
|
||||
my ($ls, $ctx) = command_output_pipe(qw/ls-tree
|
||||
-r --name-only -z/,
|
||||
$self->{c}, '--', $gpath);
|
||||
$tree);
|
||||
local $/ = "\0";
|
||||
while (<$ls>) {
|
||||
chomp;
|
||||
$self->{gii}->remove($_);
|
||||
print "\tD\t$_\n" unless $::_q;
|
||||
my $rmpath = "$gpath/$_";
|
||||
$self->{gii}->remove($rmpath);
|
||||
print "\tD\t$rmpath\n" unless $::_q;
|
||||
}
|
||||
print "\tD\t$gpath/\n" unless $::_q;
|
||||
command_close_pipe($ls, $ctx);
|
||||
@@ -3414,8 +3418,8 @@ sub open_file {
|
||||
goto out if is_path_ignored($path);
|
||||
|
||||
my $gpath = $self->git_path($path);
|
||||
($mode, $blob) = (command('ls-tree', $self->{c}, '--', $gpath)
|
||||
=~ /^(\d{6}) blob ([a-f\d]{40})\t/);
|
||||
($mode, $blob) = (command('ls-tree', '-z', $self->{c}, "./$gpath")
|
||||
=~ /\A(\d{6}) blob ([a-f\d]{40})\t\Q$gpath\E\0/);
|
||||
unless (defined $mode && defined $blob) {
|
||||
die "$path was not found in commit $self->{c} (r$rev)\n";
|
||||
}
|
||||
|
||||
18
mailmap.c
18
mailmap.c
@@ -50,6 +50,15 @@ static void add_mapping(struct string_list *map,
|
||||
{
|
||||
struct mailmap_entry *me;
|
||||
int index;
|
||||
char *p;
|
||||
|
||||
if (old_email)
|
||||
for (p = old_email; *p; p++)
|
||||
*p = tolower(*p);
|
||||
if (new_email)
|
||||
for (p = new_email; *p; p++)
|
||||
*p = tolower(*p);
|
||||
|
||||
if (old_email == NULL) {
|
||||
old_email = new_email;
|
||||
new_email = NULL;
|
||||
@@ -90,7 +99,8 @@ static void add_mapping(struct string_list *map,
|
||||
old_name, old_email, new_name, new_email);
|
||||
}
|
||||
|
||||
static char *parse_name_and_email(char *buffer, char **name, char **email)
|
||||
static char *parse_name_and_email(char *buffer, char **name,
|
||||
char **email, int allow_empty_email)
|
||||
{
|
||||
char *left, *right, *nstart, *nend;
|
||||
*name = *email = 0;
|
||||
@@ -99,7 +109,7 @@ static char *parse_name_and_email(char *buffer, char **name, char **email)
|
||||
return NULL;
|
||||
if ((right = strchr(left+1, '>')) == NULL)
|
||||
return NULL;
|
||||
if (left+1 == right)
|
||||
if (!allow_empty_email && (left+1 == right))
|
||||
return NULL;
|
||||
|
||||
/* remove whitespace from beginning and end of name */
|
||||
@@ -150,8 +160,8 @@ static int read_single_mailmap(struct string_list *map, const char *filename, ch
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if ((name2 = parse_name_and_email(buffer, &name1, &email1)) != NULL)
|
||||
parse_name_and_email(name2, &name2, &email2);
|
||||
if ((name2 = parse_name_and_email(buffer, &name1, &email1, 0)) != NULL)
|
||||
parse_name_and_email(name2, &name2, &email2, 1);
|
||||
|
||||
if (email1)
|
||||
add_mapping(map, name1, email1, name2, email2);
|
||||
|
||||
3
remote.c
3
remote.c
@@ -1401,9 +1401,10 @@ int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs)
|
||||
if (theirs == ours)
|
||||
return 0;
|
||||
|
||||
/* Run "rev-list --left-right ours...theirs" internally... */
|
||||
/* Run "rev-list --no-merges --left-right ours...theirs" internally... */
|
||||
rev_argc = 0;
|
||||
rev_argv[rev_argc++] = NULL;
|
||||
rev_argv[rev_argc++] = "--no-merges";
|
||||
rev_argv[rev_argc++] = "--left-right";
|
||||
rev_argv[rev_argc++] = symmetric;
|
||||
rev_argv[rev_argc++] = "--";
|
||||
|
||||
@@ -1106,10 +1106,6 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
|
||||
revs->edge_hint = 1;
|
||||
} else if (!strcmp(arg, "--unpacked")) {
|
||||
revs->unpacked = 1;
|
||||
revs->kept_pack_only = 0;
|
||||
} else if (!strcmp(arg, "--kept-pack-only")) {
|
||||
revs->unpacked = 1;
|
||||
revs->kept_pack_only = 1;
|
||||
} else if (!prefixcmp(arg, "--unpacked=")) {
|
||||
die("--unpacked=<packfile> no longer supported.");
|
||||
} else if (!strcmp(arg, "-r")) {
|
||||
@@ -1679,10 +1675,7 @@ enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit)
|
||||
{
|
||||
if (commit->object.flags & SHOWN)
|
||||
return commit_ignore;
|
||||
if (revs->unpacked &&
|
||||
(revs->kept_pack_only
|
||||
? has_sha1_kept_pack(commit->object.sha1)
|
||||
: has_sha1_pack(commit->object.sha1)))
|
||||
if (revs->unpacked && has_sha1_pack(commit->object.sha1))
|
||||
return commit_ignore;
|
||||
if (revs->show_all)
|
||||
return commit_show;
|
||||
|
||||
@@ -50,7 +50,6 @@ struct rev_info {
|
||||
edge_hint:1,
|
||||
limited:1,
|
||||
unpacked:1,
|
||||
kept_pack_only:1,
|
||||
boundary:2,
|
||||
left_right:1,
|
||||
rewrite_parents:1,
|
||||
|
||||
@@ -10,7 +10,7 @@ enum {
|
||||
ERR_RUN_COMMAND_WAITPID_SIGNAL,
|
||||
ERR_RUN_COMMAND_WAITPID_NOEXIT,
|
||||
};
|
||||
#define IS_RUN_COMMAND_ERR(x) ((x) <= -ERR_RUN_COMMAND_FORK)
|
||||
#define IS_RUN_COMMAND_ERR(x) (-(x) >= ERR_RUN_COMMAND_FORK)
|
||||
|
||||
struct child_process {
|
||||
const char **argv;
|
||||
|
||||
21
sha1_file.c
21
sha1_file.c
@@ -1919,8 +1919,7 @@ off_t find_pack_entry_one(const unsigned char *sha1,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e,
|
||||
int kept_pack_only)
|
||||
static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e)
|
||||
{
|
||||
static struct packed_git *last_found = (void *)1;
|
||||
struct packed_git *p;
|
||||
@@ -1932,8 +1931,6 @@ static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e,
|
||||
p = (last_found == (void *)1) ? packed_git : last_found;
|
||||
|
||||
do {
|
||||
if (kept_pack_only && !p->pack_keep)
|
||||
goto next;
|
||||
if (p->num_bad_objects) {
|
||||
unsigned i;
|
||||
for (i = 0; i < p->num_bad_objects; i++)
|
||||
@@ -1973,16 +1970,6 @@ static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e)
|
||||
{
|
||||
return find_pack_ent(sha1, e, 0);
|
||||
}
|
||||
|
||||
static int find_kept_pack_entry(const unsigned char *sha1, struct pack_entry *e)
|
||||
{
|
||||
return find_pack_ent(sha1, e, 1);
|
||||
}
|
||||
|
||||
struct packed_git *find_sha1_pack(const unsigned char *sha1,
|
||||
struct packed_git *packs)
|
||||
{
|
||||
@@ -2456,12 +2443,6 @@ int has_sha1_pack(const unsigned char *sha1)
|
||||
return find_pack_entry(sha1, &e);
|
||||
}
|
||||
|
||||
int has_sha1_kept_pack(const unsigned char *sha1)
|
||||
{
|
||||
struct pack_entry e;
|
||||
return find_kept_pack_entry(sha1, &e);
|
||||
}
|
||||
|
||||
int has_sha1_file(const unsigned char *sha1)
|
||||
{
|
||||
struct pack_entry e;
|
||||
|
||||
@@ -128,6 +128,21 @@ test_expect_success 'additional command line cc' '
|
||||
grep "^ *S. E. Cipient <scipient@example.com>$" patch5
|
||||
'
|
||||
|
||||
test_expect_success 'command line headers' '
|
||||
|
||||
git config --unset-all format.headers &&
|
||||
git format-patch --add-header="Cc: R. E. Cipient <rcipient@example.com>" --stdout master..side | sed -e "/^$/q" >patch6 &&
|
||||
grep "^Cc: R. E. Cipient <rcipient@example.com>$" patch6
|
||||
'
|
||||
|
||||
test_expect_success 'configuration headers and command line headers' '
|
||||
|
||||
git config --replace-all format.headers "Cc: R. E. Cipient <rcipient@example.com>" &&
|
||||
git format-patch --add-header="Cc: S. E. Cipient <scipient@example.com>" --stdout master..side | sed -e "/^$/q" >patch7 &&
|
||||
grep "^Cc: R. E. Cipient <rcipient@example.com>,$" patch7 &&
|
||||
grep "^ *S. E. Cipient <scipient@example.com>$" patch7
|
||||
'
|
||||
|
||||
test_expect_success 'multiple files' '
|
||||
|
||||
rm -rf patches/ &&
|
||||
|
||||
@@ -88,5 +88,66 @@ test_expect_failure 'packed obs in alt ODB are repacked when local repo has pack
|
||||
done
|
||||
'
|
||||
|
||||
test_expect_success 'packed obs in alternate ODB kept pack are repacked' '
|
||||
# swap the .keep so the commit object is in the pack with .keep
|
||||
for p in alt_objects/pack/*.pack
|
||||
do
|
||||
base_name=$(basename $p .pack)
|
||||
if test -f alt_objects/pack/$base_name.keep
|
||||
then
|
||||
rm alt_objects/pack/$base_name.keep
|
||||
else
|
||||
touch alt_objects/pack/$base_name.keep
|
||||
fi
|
||||
done
|
||||
git repack -a -d &&
|
||||
myidx=$(ls -1 .git/objects/pack/*.idx) &&
|
||||
test -f "$myidx" &&
|
||||
for p in alt_objects/pack/*.idx; do
|
||||
git verify-pack -v $p | sed -n -e "/^[0-9a-f]\{40\}/p"
|
||||
done | while read sha1 rest; do
|
||||
if ! ( git verify-pack -v $myidx | grep "^$sha1" ); then
|
||||
echo "Missing object in local pack: $sha1"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
'
|
||||
|
||||
test_expect_success 'packed unreachable obs in alternate ODB are not loosened' '
|
||||
rm -f alt_objects/pack/*.keep &&
|
||||
mv .git/objects/pack/* alt_objects/pack/ &&
|
||||
csha1=$(git rev-parse HEAD^{commit}) &&
|
||||
git reset --hard HEAD^ &&
|
||||
sleep 1 &&
|
||||
git reflog expire --expire=now --expire-unreachable=now --all &&
|
||||
# The pack-objects call on the next line is equivalent to
|
||||
# git repack -A -d without the call to prune-packed
|
||||
git pack-objects --honor-pack-keep --non-empty --all --reflog \
|
||||
--unpack-unreachable </dev/null pack &&
|
||||
rm -f .git/objects/pack/* &&
|
||||
mv pack-* .git/objects/pack/ &&
|
||||
test 0 = $(git verify-pack -v -- .git/objects/pack/*.idx |
|
||||
egrep "^$csha1 " | sort | uniq | wc -l) &&
|
||||
echo > .git/objects/info/alternates &&
|
||||
test_must_fail git show $csha1
|
||||
'
|
||||
|
||||
test_expect_success 'local packed unreachable obs that exist in alternate ODB are not loosened' '
|
||||
echo `pwd`/alt_objects > .git/objects/info/alternates &&
|
||||
echo "$csha1" | git pack-objects --non-empty --all --reflog pack &&
|
||||
rm -f .git/objects/pack/* &&
|
||||
mv pack-* .git/objects/pack/ &&
|
||||
# The pack-objects call on the next line is equivalent to
|
||||
# git repack -A -d without the call to prune-packed
|
||||
git pack-objects --honor-pack-keep --non-empty --all --reflog \
|
||||
--unpack-unreachable </dev/null pack &&
|
||||
rm -f .git/objects/pack/* &&
|
||||
mv pack-* .git/objects/pack/ &&
|
||||
test 0 = $(git verify-pack -v -- .git/objects/pack/*.idx |
|
||||
egrep "^$csha1 " | sort | uniq | wc -l) &&
|
||||
echo > .git/objects/info/alternates &&
|
||||
test_must_fail git show $csha1
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
|
||||
@@ -421,8 +421,8 @@ test_confirm () {
|
||||
--from="Example <nobody@example.com>" \
|
||||
--to=nobody@example.com \
|
||||
--smtp-server="$(pwd)/fake.sendmail" \
|
||||
$@ \
|
||||
$patches | grep "Send this email"
|
||||
$@ $patches > stdout &&
|
||||
grep "Send this email" stdout
|
||||
}
|
||||
|
||||
test_expect_success '--confirm=always' '
|
||||
@@ -444,8 +444,10 @@ test_expect_success '--confirm=compose' '
|
||||
test_expect_success 'confirm by default (due to cc)' '
|
||||
CONFIRM=$(git config --get sendemail.confirm) &&
|
||||
git config --unset sendemail.confirm &&
|
||||
test_confirm &&
|
||||
git config sendemail.confirm $CONFIRM
|
||||
test_confirm
|
||||
ret="$?"
|
||||
git config sendemail.confirm ${CONFIRM:-never}
|
||||
test $ret = "0"
|
||||
'
|
||||
|
||||
test_expect_success 'confirm by default (due to --compose)' '
|
||||
@@ -457,6 +459,65 @@ test_expect_success 'confirm by default (due to --compose)' '
|
||||
test $ret = "0"
|
||||
'
|
||||
|
||||
test_expect_success 'confirm detects EOF (inform assumes y)' '
|
||||
CONFIRM=$(git config --get sendemail.confirm) &&
|
||||
git config --unset sendemail.confirm &&
|
||||
rm -fr outdir &&
|
||||
git format-patch -2 -o outdir &&
|
||||
GIT_SEND_EMAIL_NOTTY=1 \
|
||||
git send-email \
|
||||
--from="Example <nobody@example.com>" \
|
||||
--to=nobody@example.com \
|
||||
--smtp-server="$(pwd)/fake.sendmail" \
|
||||
outdir/*.patch < /dev/null
|
||||
ret="$?"
|
||||
git config sendemail.confirm ${CONFIRM:-never}
|
||||
test $ret = "0"
|
||||
'
|
||||
|
||||
test_expect_success 'confirm detects EOF (auto causes failure)' '
|
||||
CONFIRM=$(git config --get sendemail.confirm) &&
|
||||
git config sendemail.confirm auto &&
|
||||
GIT_SEND_EMAIL_NOTTY=1 &&
|
||||
export GIT_SEND_EMAIL_NOTTY &&
|
||||
test_must_fail git send-email \
|
||||
--from="Example <nobody@example.com>" \
|
||||
--to=nobody@example.com \
|
||||
--smtp-server="$(pwd)/fake.sendmail" \
|
||||
$patches < /dev/null
|
||||
ret="$?"
|
||||
git config sendemail.confirm ${CONFIRM:-never}
|
||||
test $ret = "0"
|
||||
'
|
||||
|
||||
test_expect_success 'confirm doesnt loop forever' '
|
||||
CONFIRM=$(git config --get sendemail.confirm) &&
|
||||
git config sendemail.confirm auto &&
|
||||
GIT_SEND_EMAIL_NOTTY=1 &&
|
||||
export GIT_SEND_EMAIL_NOTTY &&
|
||||
yes "bogus" | test_must_fail git send-email \
|
||||
--from="Example <nobody@example.com>" \
|
||||
--to=nobody@example.com \
|
||||
--smtp-server="$(pwd)/fake.sendmail" \
|
||||
$patches
|
||||
ret="$?"
|
||||
git config sendemail.confirm ${CONFIRM:-never}
|
||||
test $ret = "0"
|
||||
'
|
||||
|
||||
test_expect_success 'utf8 Cc is rfc2047 encoded' '
|
||||
clean_fake_sendmail &&
|
||||
rm -fr outdir &&
|
||||
git format-patch -1 -o outdir --cc="àéìöú <utf8@example.com>" &&
|
||||
git send-email \
|
||||
--from="Example <nobody@example.com>" \
|
||||
--to=nobody@example.com \
|
||||
--smtp-server="$(pwd)/fake.sendmail" \
|
||||
outdir/*.patch &&
|
||||
grep "^Cc:" msgtxt1 |
|
||||
grep "=?utf-8?q?=C3=A0=C3=A9=C3=AC=C3=B6=C3=BA?= <utf8@example.com>"
|
||||
'
|
||||
|
||||
test_expect_success '--compose adds MIME for utf8 body' '
|
||||
clean_fake_sendmail &&
|
||||
(echo "#!$SHELL_PATH" &&
|
||||
|
||||
@@ -262,4 +262,19 @@ test_expect_success 'cope with tagger-less tags' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'set-up a few more tags for tag export tests' '
|
||||
git checkout -f master &&
|
||||
HEAD_TREE=`git show -s --pretty=raw HEAD | grep tree | sed "s/tree //"` &&
|
||||
git tag tree_tag -m "tagging a tree" $HEAD_TREE &&
|
||||
git tag -a tree_tag-obj -m "tagging a tree" $HEAD_TREE &&
|
||||
git tag tag-obj_tag -m "tagging a tag" tree_tag-obj &&
|
||||
git tag -a tag-obj_tag-obj -m "tagging a tag" tree_tag-obj
|
||||
'
|
||||
|
||||
# NEEDSWORK: not just check return status, but validate the output
|
||||
test_expect_success 'tree_tag' 'git fast-export tree_tag'
|
||||
test_expect_success 'tree_tag-obj' 'git fast-export tree_tag-obj'
|
||||
test_expect_success 'tag-obj_tag' 'git fast-export tag-obj_tag'
|
||||
test_expect_success 'tag-obj_tag-obj' 'git fast-export tag-obj_tag-obj'
|
||||
|
||||
test_done
|
||||
|
||||
Reference in New Issue
Block a user