mirror of
https://github.com/git/git.git
synced 2026-04-04 05:50:14 +02:00
Merge branch 'master' of git://repo.or.cz/alt-git
This commit is contained in:
355
.gitignore
vendored
355
.gitignore
vendored
@@ -1,184 +1,185 @@
|
||||
GIT-BUILD-OPTIONS
|
||||
GIT-CFLAGS
|
||||
GIT-GUI-VARS
|
||||
GIT-VERSION-FILE
|
||||
git
|
||||
git-add
|
||||
git-add--interactive
|
||||
git-am
|
||||
git-annotate
|
||||
git-apply
|
||||
git-archimport
|
||||
git-archive
|
||||
git-bisect
|
||||
git-bisect--helper
|
||||
git-blame
|
||||
git-branch
|
||||
git-bundle
|
||||
git-cat-file
|
||||
git-check-attr
|
||||
git-check-ref-format
|
||||
git-checkout
|
||||
git-checkout-index
|
||||
git-cherry
|
||||
git-cherry-pick
|
||||
git-clean
|
||||
git-clone
|
||||
git-commit
|
||||
git-commit-tree
|
||||
git-config
|
||||
git-count-objects
|
||||
git-cvsexportcommit
|
||||
git-cvsimport
|
||||
git-cvsserver
|
||||
git-daemon
|
||||
git-diff
|
||||
git-diff-files
|
||||
git-diff-index
|
||||
git-diff-tree
|
||||
git-difftool
|
||||
git-difftool--helper
|
||||
git-describe
|
||||
git-fast-export
|
||||
git-fast-import
|
||||
git-fetch
|
||||
git-fetch--tool
|
||||
git-fetch-pack
|
||||
git-filter-branch
|
||||
git-fmt-merge-msg
|
||||
git-for-each-ref
|
||||
git-format-patch
|
||||
git-fsck
|
||||
git-fsck-objects
|
||||
git-gc
|
||||
git-get-tar-commit-id
|
||||
git-grep
|
||||
git-hash-object
|
||||
git-help
|
||||
git-http-fetch
|
||||
git-http-push
|
||||
git-imap-send
|
||||
git-index-pack
|
||||
git-init
|
||||
git-init-db
|
||||
git-instaweb
|
||||
git-log
|
||||
git-lost-found
|
||||
git-ls-files
|
||||
git-ls-remote
|
||||
git-ls-tree
|
||||
git-mailinfo
|
||||
git-mailsplit
|
||||
git-merge
|
||||
git-merge-base
|
||||
git-merge-index
|
||||
git-merge-file
|
||||
git-merge-tree
|
||||
git-merge-octopus
|
||||
git-merge-one-file
|
||||
git-merge-ours
|
||||
git-merge-recursive
|
||||
git-merge-resolve
|
||||
git-merge-subtree
|
||||
git-mergetool
|
||||
git-mergetool--lib
|
||||
git-mktag
|
||||
git-mktree
|
||||
git-name-rev
|
||||
git-mv
|
||||
git-pack-redundant
|
||||
git-pack-objects
|
||||
git-pack-refs
|
||||
git-parse-remote
|
||||
git-patch-id
|
||||
git-peek-remote
|
||||
git-prune
|
||||
git-prune-packed
|
||||
git-pull
|
||||
git-push
|
||||
git-quiltimport
|
||||
git-read-tree
|
||||
git-rebase
|
||||
git-rebase--interactive
|
||||
git-receive-pack
|
||||
git-reflog
|
||||
git-relink
|
||||
git-remote
|
||||
git-remote-curl
|
||||
git-repack
|
||||
git-replace
|
||||
git-repo-config
|
||||
git-request-pull
|
||||
git-rerere
|
||||
git-reset
|
||||
git-rev-list
|
||||
git-rev-parse
|
||||
git-revert
|
||||
git-rm
|
||||
git-send-email
|
||||
git-send-pack
|
||||
git-sh-setup
|
||||
git-shell
|
||||
git-shortlog
|
||||
git-show
|
||||
git-show-branch
|
||||
git-show-index
|
||||
git-show-ref
|
||||
git-stage
|
||||
git-stash
|
||||
git-status
|
||||
git-stripspace
|
||||
git-submodule
|
||||
git-svn
|
||||
git-symbolic-ref
|
||||
git-tag
|
||||
git-tar-tree
|
||||
git-unpack-file
|
||||
git-unpack-objects
|
||||
git-update-index
|
||||
git-update-ref
|
||||
git-update-server-info
|
||||
git-upload-archive
|
||||
git-upload-pack
|
||||
git-var
|
||||
git-verify-pack
|
||||
git-verify-tag
|
||||
git-web--browse
|
||||
git-whatchanged
|
||||
git-write-tree
|
||||
git-core-*/?*
|
||||
gitk-wish
|
||||
gitweb/gitweb.cgi
|
||||
test-chmtime
|
||||
test-ctype
|
||||
test-date
|
||||
test-delta
|
||||
test-dump-cache-tree
|
||||
test-genrandom
|
||||
test-match-trees
|
||||
test-parse-options
|
||||
test-path-utils
|
||||
test-sha1
|
||||
test-sigchain
|
||||
common-cmds.h
|
||||
/GIT-BUILD-OPTIONS
|
||||
/GIT-CFLAGS
|
||||
/GIT-GUI-VARS
|
||||
/GIT-VERSION-FILE
|
||||
/git
|
||||
/git-add
|
||||
/git-add--interactive
|
||||
/git-am
|
||||
/git-annotate
|
||||
/git-apply
|
||||
/git-archimport
|
||||
/git-archive
|
||||
/git-bisect
|
||||
/git-bisect--helper
|
||||
/git-blame
|
||||
/git-branch
|
||||
/git-bundle
|
||||
/git-cat-file
|
||||
/git-check-attr
|
||||
/git-check-ref-format
|
||||
/git-checkout
|
||||
/git-checkout-index
|
||||
/git-cherry
|
||||
/git-cherry-pick
|
||||
/git-clean
|
||||
/git-clone
|
||||
/git-commit
|
||||
/git-commit-tree
|
||||
/git-config
|
||||
/git-count-objects
|
||||
/git-cvsexportcommit
|
||||
/git-cvsimport
|
||||
/git-cvsserver
|
||||
/git-daemon
|
||||
/git-diff
|
||||
/git-diff-files
|
||||
/git-diff-index
|
||||
/git-diff-tree
|
||||
/git-difftool
|
||||
/git-difftool--helper
|
||||
/git-describe
|
||||
/git-fast-export
|
||||
/git-fast-import
|
||||
/git-fetch
|
||||
/git-fetch--tool
|
||||
/git-fetch-pack
|
||||
/git-filter-branch
|
||||
/git-fmt-merge-msg
|
||||
/git-for-each-ref
|
||||
/git-format-patch
|
||||
/git-fsck
|
||||
/git-fsck-objects
|
||||
/git-gc
|
||||
/git-get-tar-commit-id
|
||||
/git-grep
|
||||
/git-hash-object
|
||||
/git-help
|
||||
/git-http-fetch
|
||||
/git-http-push
|
||||
/git-imap-send
|
||||
/git-index-pack
|
||||
/git-init
|
||||
/git-init-db
|
||||
/git-instaweb
|
||||
/git-log
|
||||
/git-lost-found
|
||||
/git-ls-files
|
||||
/git-ls-remote
|
||||
/git-ls-tree
|
||||
/git-mailinfo
|
||||
/git-mailsplit
|
||||
/git-merge
|
||||
/git-merge-base
|
||||
/git-merge-index
|
||||
/git-merge-file
|
||||
/git-merge-tree
|
||||
/git-merge-octopus
|
||||
/git-merge-one-file
|
||||
/git-merge-ours
|
||||
/git-merge-recursive
|
||||
/git-merge-resolve
|
||||
/git-merge-subtree
|
||||
/git-mergetool
|
||||
/git-mergetool--lib
|
||||
/git-mktag
|
||||
/git-mktree
|
||||
/git-name-rev
|
||||
/git-mv
|
||||
/git-pack-redundant
|
||||
/git-pack-objects
|
||||
/git-pack-refs
|
||||
/git-parse-remote
|
||||
/git-patch-id
|
||||
/git-peek-remote
|
||||
/git-prune
|
||||
/git-prune-packed
|
||||
/git-pull
|
||||
/git-push
|
||||
/git-quiltimport
|
||||
/git-read-tree
|
||||
/git-rebase
|
||||
/git-rebase--interactive
|
||||
/git-receive-pack
|
||||
/git-reflog
|
||||
/git-relink
|
||||
/git-remote
|
||||
/git-remote-curl
|
||||
/git-repack
|
||||
/git-replace
|
||||
/git-repo-config
|
||||
/git-request-pull
|
||||
/git-rerere
|
||||
/git-reset
|
||||
/git-rev-list
|
||||
/git-rev-parse
|
||||
/git-revert
|
||||
/git-rm
|
||||
/git-send-email
|
||||
/git-send-pack
|
||||
/git-sh-setup
|
||||
/git-shell
|
||||
/git-shortlog
|
||||
/git-show
|
||||
/git-show-branch
|
||||
/git-show-index
|
||||
/git-show-ref
|
||||
/git-stage
|
||||
/git-stash
|
||||
/git-status
|
||||
/git-stripspace
|
||||
/git-submodule
|
||||
/git-svn
|
||||
/git-symbolic-ref
|
||||
/git-tag
|
||||
/git-tar-tree
|
||||
/git-unpack-file
|
||||
/git-unpack-objects
|
||||
/git-update-index
|
||||
/git-update-ref
|
||||
/git-update-server-info
|
||||
/git-upload-archive
|
||||
/git-upload-pack
|
||||
/git-var
|
||||
/git-verify-pack
|
||||
/git-verify-tag
|
||||
/git-web--browse
|
||||
/git-whatchanged
|
||||
/git-write-tree
|
||||
/git-core-*/?*
|
||||
/gitk-git/gitk-wish
|
||||
/gitweb/gitweb.cgi
|
||||
/test-chmtime
|
||||
/test-ctype
|
||||
/test-date
|
||||
/test-delta
|
||||
/test-dump-cache-tree
|
||||
/test-genrandom
|
||||
/test-match-trees
|
||||
/test-parse-options
|
||||
/test-path-utils
|
||||
/test-sha1
|
||||
/test-sigchain
|
||||
/common-cmds.h
|
||||
*.tar.gz
|
||||
*.dsc
|
||||
*.deb
|
||||
git.spec
|
||||
/git.spec
|
||||
*.exe
|
||||
*.[aos]
|
||||
*.py[co]
|
||||
config.mak
|
||||
autom4te.cache
|
||||
config.cache
|
||||
config.log
|
||||
config.status
|
||||
config.mak.autogen
|
||||
config.mak.append
|
||||
configure
|
||||
tags
|
||||
TAGS
|
||||
cscope*
|
||||
*+
|
||||
/config.mak
|
||||
/autom4te.cache
|
||||
/config.cache
|
||||
/config.log
|
||||
/config.status
|
||||
/config.mak.autogen
|
||||
/config.mak.append
|
||||
/configure
|
||||
/tags
|
||||
/TAGS
|
||||
/cscope*
|
||||
*.obj
|
||||
*.lib
|
||||
*.sln
|
||||
@@ -188,5 +189,5 @@ cscope*
|
||||
*.user
|
||||
*.idb
|
||||
*.pdb
|
||||
Debug/
|
||||
Release/
|
||||
/Debug/
|
||||
/Release/
|
||||
|
||||
63
Documentation/RelNotes-1.6.5.3.txt
Normal file
63
Documentation/RelNotes-1.6.5.3.txt
Normal file
@@ -0,0 +1,63 @@
|
||||
Git v1.6.5.3 Release Notes
|
||||
==========================
|
||||
|
||||
Fixes since v1.6.5.2
|
||||
--------------------
|
||||
|
||||
* info/grafts file didn't ignore trailing CR at the end of lines.
|
||||
|
||||
* Packages generated on newer FC were unreadable by older versions of
|
||||
RPM as the new default is to use stronger hash.
|
||||
|
||||
* output from "git blame" was unreadable when the file ended in an
|
||||
incomplete line.
|
||||
|
||||
* "git add -i/-p" didn't handle deletion of empty files correctly.
|
||||
|
||||
* "git clone" takes up to two parameters, but did not complain when
|
||||
given more arguments than necessary and silently ignored them.
|
||||
|
||||
* "git cvsimport" did not read files given as command line arguments
|
||||
correctly when it is run from a subdirectory.
|
||||
|
||||
* "git diff --color-words -U0" didn't work correctly.
|
||||
|
||||
* The handling of blank lines at the end of file by "git diff/apply
|
||||
--whitespace" was inconsistent with the other kinds of errors.
|
||||
They are now colored, warned against, and fixed the same way as others.
|
||||
|
||||
* There was no way to allow blank lines at the end of file without
|
||||
allowing extra blanks at the end of lines. You can use blank-at-eof
|
||||
and blank-at-eol whitespace error class to specify them separately.
|
||||
The old trailing-space error class is now a short-hand to set both.
|
||||
|
||||
* "-p" option to "git format-patch" was supposed to suppress diffstat
|
||||
generation, but it was broken since 1.6.1.
|
||||
|
||||
* "git imap-send" did not compile cleanly with newer OpenSSL.
|
||||
|
||||
* "git help -a" outside of a git repository was broken.
|
||||
|
||||
* "git ls-files -i" was supposed to be inverse of "git ls-files" without -i
|
||||
with respect to exclude patterns, but it was broken since 1.6.5.2.
|
||||
|
||||
* "git ls-remote" outside of a git repository over http was broken.
|
||||
|
||||
* "git rebase -i" gave bogus error message when the command word was
|
||||
misspelled.
|
||||
|
||||
* "git receive-pack" that is run in response to "git push" did not run
|
||||
garbage collection nor update-server-info, but in larger hosting sites,
|
||||
these almost always need to be run. To help site administrators, the
|
||||
command now runs "gc --auto" and "u-s-i" by setting receive.autogc
|
||||
and receive.updateserverinfo configuration variables, respectively.
|
||||
|
||||
* Release notes spelled the package name with incorrect capitalization.
|
||||
|
||||
* "gitweb" did not escape non-ascii characters correctly in the URL.
|
||||
|
||||
* "gitweb" showed "patch" link even for merge commits.
|
||||
|
||||
* "gitweb" showed incorrect links for blob line numbers in pathinfo mode.
|
||||
|
||||
Other minor documentation updates are included.
|
||||
@@ -1,4 +1,4 @@
|
||||
GIT v1.6.6 Release Notes
|
||||
Git v1.6.6 Release Notes
|
||||
========================
|
||||
|
||||
In this release, "git fsck" defaults to "git fsck --full" and checks
|
||||
@@ -40,6 +40,8 @@ Updates since v1.6.5
|
||||
|
||||
(subsystems)
|
||||
|
||||
* various git-gui updates including new translations, wm states, etc.
|
||||
|
||||
(portability)
|
||||
|
||||
(performance)
|
||||
@@ -49,6 +51,17 @@ Updates since v1.6.5
|
||||
* The object replace mechanism can be bypassed with --no-replace-objects
|
||||
global option given to the "git" program.
|
||||
|
||||
* "git bisect reset" can reset to an arbitrary commit.
|
||||
|
||||
* "git checkout frotz" when there is no local branch "frotz" but there
|
||||
is only one remote tracking branch "frotz" is taken as a request to
|
||||
start the named branch at the corresponding remote tracking branch.
|
||||
|
||||
* "git describe" can be told to add "-dirty" suffix with "--dirty" option.
|
||||
|
||||
* "git diff" learned --submodule option to show a list of one-line logs
|
||||
instead of differences between the commit object names.
|
||||
|
||||
* "git fsck" by default checks the packfiles (i.e. "--full" is the
|
||||
default); you can turn it off with "git fsck --no-full".
|
||||
|
||||
@@ -59,11 +72,23 @@ Updates since v1.6.5
|
||||
|
||||
* "git log --decorate" shows the location of HEAD as well.
|
||||
|
||||
* "--pretty=format" option to "log" family of commands learned:
|
||||
|
||||
. to wrap text with the "%w()" specifier.
|
||||
. to show reflog information with "%g[sdD]" specifier.
|
||||
|
||||
* "git merge" (and "git pull") learned --ff-only option to make it fail
|
||||
if the merge does not result in a fast-forward.
|
||||
|
||||
* "git mergetool" learned to use p4merge.
|
||||
|
||||
* "git rebase -i" learned "reword" that acts like "edit" but immediately
|
||||
starts an editor to tweak the log message without returning control to
|
||||
the shell, which is done by "edit" to give an opportunity to tweak the
|
||||
contents.
|
||||
|
||||
* "git svn" learned to read SVN 1.5+ and SVK merge tickets.
|
||||
|
||||
* Author names shown in gitweb output are links to search commits by the
|
||||
author.
|
||||
|
||||
@@ -76,33 +101,8 @@ Fixes since v1.6.5
|
||||
All of the fixes in v1.6.5.X maintenance series are included in this
|
||||
release, unless otherwise noted.
|
||||
|
||||
* "git apply" and "git diff" (including patch output from "git log -p")
|
||||
now flags trailing blank lines as whitespace errors correctly (only
|
||||
"apply --whitespace=fix" stripped them but "apply --whitespace=warn"
|
||||
did not even warn).
|
||||
|
||||
* Two whitespace error classes, 'blank-at-eof' and 'blank-at-eol', have
|
||||
been introduced (settable by core.whitespace configuration variable and
|
||||
whitespace attribute). The 'trailing-space' whitespace error class has
|
||||
become a short-hand to cover both of these and there is no behaviour
|
||||
change for existing set-ups.
|
||||
|
||||
* "git cvsimport" did not work well when it is fed filenames from the
|
||||
command line and is not started at the top of the work tree. We should
|
||||
backport this by merging f6fdbb6 (cvsimport: fix relative argument
|
||||
filenames, 2009-10-19).
|
||||
|
||||
* The way gitweb escapes its CGI parameters were broken especially when
|
||||
the parameter was a UTF-8 string. We may want to backport this to
|
||||
1.6.5.X series by merging 452e225 (gitweb: fix esc_param, 2009-10-13).
|
||||
|
||||
* gitweb used to show 'patch' link for merge commits but the output from
|
||||
it is not usable to feed "git am" with. We may want to backport this
|
||||
to 1.6.5.X series by merging 1655c98 (gitweb: Do not show 'patch' link
|
||||
for merge commits, 2009-10-09).
|
||||
|
||||
---
|
||||
exec >/var/tmp/1
|
||||
echo O=$(git describe master)
|
||||
O=v1.6.5.2-73-g9b12444
|
||||
O=v1.6.5.3-152-g122d0f6
|
||||
git shortlog --no-merges $O..master --not maint
|
||||
|
||||
@@ -1360,7 +1360,7 @@ receive.denyCurrentBranch::
|
||||
|
||||
receive.denyNonFastForwards::
|
||||
If set to true, git-receive-pack will deny a ref update which is
|
||||
not a fast forward. Use this to prevent such an update via a push,
|
||||
not a fast-forward. Use this to prevent such an update via a push,
|
||||
even if that push is forced. This configuration variable is
|
||||
set when initializing a shared repository.
|
||||
|
||||
|
||||
@@ -76,10 +76,10 @@ OPTIONS
|
||||
work tree and add them to the index. This gives the user a chance
|
||||
to review the difference before adding modified contents to the
|
||||
index.
|
||||
|
||||
This effectively runs ``add --interactive``, but bypasses the
|
||||
initial command menu and directly jumps to `patch` subcommand.
|
||||
See ``Interactive mode'' for details.
|
||||
+
|
||||
This effectively runs `add --interactive`, but bypasses the
|
||||
initial command menu and directly jumps to the `patch` subcommand.
|
||||
See ``Interactive mode'' for details.
|
||||
|
||||
-e, \--edit::
|
||||
Open the diff vs. the index in an editor and let the user
|
||||
|
||||
@@ -8,7 +8,9 @@ git-describe - Show the most recent tag that is reachable from a commit
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] <committish>...
|
||||
'git describe' [--all] [--tags] [--contains] [--abbrev=<n>] --dirty[=<mark>]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
@@ -27,6 +29,11 @@ OPTIONS
|
||||
<committish>...::
|
||||
Committish object names to describe.
|
||||
|
||||
--dirty[=<mark>]::
|
||||
Describe the working tree.
|
||||
It means describe HEAD and appends <mark> (`-dirty` by
|
||||
default) if the working tree is dirty.
|
||||
|
||||
--all::
|
||||
Instead of using only the annotated tags, use any ref
|
||||
found in `.git/refs/`. This option enables matching
|
||||
|
||||
@@ -31,7 +31,7 @@ OPTIONS
|
||||
Use the diff tool specified by <tool>.
|
||||
Valid merge tools are:
|
||||
kdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff,
|
||||
ecmerge, diffuse, opendiff and araxis.
|
||||
ecmerge, diffuse, opendiff, p4merge and araxis.
|
||||
+
|
||||
If a diff tool is not specified, 'git-difftool'
|
||||
will use the configuration variable `diff.tool`. If the
|
||||
|
||||
@@ -82,11 +82,11 @@ destination side.
|
||||
|
||||
Without '--force', the <src> ref is stored at the remote only if
|
||||
<dst> does not exist, or <dst> is a proper subset (i.e. an
|
||||
ancestor) of <src>. This check, known as "fast forward check",
|
||||
ancestor) of <src>. This check, known as "fast-forward check",
|
||||
is performed in order to avoid accidentally overwriting the
|
||||
remote ref and lose other peoples' commits from there.
|
||||
|
||||
With '--force', the fast forward check is disabled for all refs.
|
||||
With '--force', the fast-forward check is disabled for all refs.
|
||||
|
||||
Optionally, a <ref> parameter can be prefixed with a plus '+' sign
|
||||
to disable the fast-forward check only on that ref.
|
||||
|
||||
@@ -48,8 +48,10 @@ OPTIONS
|
||||
|
||||
-i::
|
||||
--ignored::
|
||||
Show ignored files in the output.
|
||||
Note that this also reverses any exclude list present.
|
||||
Show only ignored files in the output. When showing files in the
|
||||
index, print only those matched by an exclude pattern. When
|
||||
showing "other" files, show only those matched by an exclude
|
||||
pattern.
|
||||
|
||||
-s::
|
||||
--stage::
|
||||
|
||||
@@ -27,7 +27,7 @@ OPTIONS
|
||||
Use the merge resolution program specified by <tool>.
|
||||
Valid merge tools are:
|
||||
kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
|
||||
diffuse, tortoisemerge, opendiff and araxis.
|
||||
diffuse, tortoisemerge, opendiff, p4merge and araxis.
|
||||
+
|
||||
If a merge resolution program is not specified, 'git-mergetool'
|
||||
will use the configuration variable `merge.tool`. If the
|
||||
|
||||
@@ -50,9 +50,9 @@ updated.
|
||||
+
|
||||
The object referenced by <src> is used to update the <dst> reference
|
||||
on the remote side, but by default this is only allowed if the
|
||||
update can fast forward <dst>. By having the optional leading `{plus}`,
|
||||
update can fast-forward <dst>. By having the optional leading `{plus}`,
|
||||
you can tell git to update the <dst> ref even when the update is not a
|
||||
fast forward. This does *not* attempt to merge <src> into <dst>. See
|
||||
fast-forward. This does *not* attempt to merge <src> into <dst>. See
|
||||
EXAMPLES below for details.
|
||||
+
|
||||
`tag <tag>` means the same as `refs/tags/<tag>:refs/tags/<tag>`.
|
||||
@@ -60,7 +60,7 @@ EXAMPLES below for details.
|
||||
Pushing an empty <src> allows you to delete the <dst> ref from
|
||||
the remote repository.
|
||||
+
|
||||
The special refspec `:` (or `{plus}:` to allow non-fast forward updates)
|
||||
The special refspec `:` (or `{plus}:` to allow non-fast-forward updates)
|
||||
directs git to push "matching" branches: for every branch that exists on
|
||||
the local side, the remote side is updated if a branch of the same name
|
||||
already exists on the remote side. This is the default operation mode
|
||||
@@ -176,10 +176,10 @@ summary::
|
||||
For a successfully pushed ref, the summary shows the old and new
|
||||
values of the ref in a form suitable for using as an argument to
|
||||
`git log` (this is `<old>..<new>` in most cases, and
|
||||
`<old>...<new>` for forced non-fast forward updates). For a
|
||||
`<old>...<new>` for forced non-fast-forward updates). For a
|
||||
failed update, more details are given for the failure.
|
||||
The string `rejected` indicates that git did not try to send the
|
||||
ref at all (typically because it is not a fast forward). The
|
||||
ref at all (typically because it is not a fast-forward). The
|
||||
string `remote rejected` indicates that the remote end refused
|
||||
the update; this rejection is typically caused by a hook on the
|
||||
remote side. The string `remote failure` indicates that the
|
||||
@@ -347,9 +347,9 @@ git push origin :experimental::
|
||||
|
||||
git push origin {plus}dev:master::
|
||||
Update the origin repository's master branch with the dev branch,
|
||||
allowing non-fast forward updates. *This can leave unreferenced
|
||||
allowing non-fast-forward updates. *This can leave unreferenced
|
||||
commits dangling in the origin repository.* Consider the
|
||||
following situation, where a fast forward is not possible:
|
||||
following situation, where a fast-forward is not possible:
|
||||
+
|
||||
----
|
||||
o---o---o---A---B origin/master
|
||||
|
||||
@@ -144,7 +144,7 @@ Two Tree Merge
|
||||
Typically, this is invoked as `git read-tree -m $H $M`, where $H
|
||||
is the head commit of the current repository, and $M is the head
|
||||
of a foreign tree, which is simply ahead of $H (i.e. we are in a
|
||||
fast forward situation).
|
||||
fast-forward situation).
|
||||
|
||||
When two trees are specified, the user is telling 'git-read-tree'
|
||||
the following:
|
||||
|
||||
@@ -20,7 +20,7 @@ The UI for the protocol is on the 'git-send-pack' side, and the
|
||||
program pair is meant to be used to push updates to remote
|
||||
repository. For pull operations, see linkgit:git-fetch-pack[1].
|
||||
|
||||
The command allows for creation and fast forwarding of sha1 refs
|
||||
The command allows for creation and fast-forwarding of sha1 refs
|
||||
(heads/tags) on the remote end (strictly speaking, it is the
|
||||
local end 'git-receive-pack' runs, but to the user who is sitting at
|
||||
the send-pack end, it is updating the remote. Confused?)
|
||||
|
||||
@@ -150,7 +150,7 @@ Automatic merge failed; fix conflicts and then commit the result.
|
||||
$ git reset --hard <2>
|
||||
$ git pull . topic/branch <3>
|
||||
Updating from 41223... to 13134...
|
||||
Fast forward
|
||||
Fast-forward
|
||||
$ git reset --hard ORIG_HEAD <4>
|
||||
------------
|
||||
+
|
||||
@@ -161,7 +161,7 @@ right now, so you decide to do that later.
|
||||
which is a synonym for "git reset --hard HEAD" clears the mess
|
||||
from the index file and the working tree.
|
||||
<3> Merge a topic branch into the current branch, which resulted
|
||||
in a fast forward.
|
||||
in a fast-forward.
|
||||
<4> But you decided that the topic branch is not ready for public
|
||||
consumption yet. "pull" or "merge" always leaves the original
|
||||
tip of the current branch in ORIG_HEAD, so resetting hard to it
|
||||
|
||||
@@ -105,11 +105,11 @@ name. See linkgit:git-rev-parse[1].
|
||||
|
||||
Without '--force', the <src> ref is stored at the remote only if
|
||||
<dst> does not exist, or <dst> is a proper subset (i.e. an
|
||||
ancestor) of <src>. This check, known as "fast forward check",
|
||||
ancestor) of <src>. This check, known as "fast-forward check",
|
||||
is performed in order to avoid accidentally overwriting the
|
||||
remote ref and lose other peoples' commits from there.
|
||||
|
||||
With '--force', the fast forward check is disabled for all refs.
|
||||
With '--force', the fast-forward check is disabled for all refs.
|
||||
|
||||
Optionally, a <ref> parameter can be prefixed with a plus '+' sign
|
||||
to disable the fast-forward check only on that ref.
|
||||
|
||||
@@ -99,6 +99,10 @@ in the index e.g. when merging in a commit;
|
||||
thus, in case the assumed-untracked file is changed upstream,
|
||||
you will need to handle the situation manually.
|
||||
|
||||
--really-refresh::
|
||||
Like '--refresh', but checks stat information unconditionally,
|
||||
without regard to the "assume unchanged" setting.
|
||||
|
||||
-g::
|
||||
--again::
|
||||
Runs 'git-update-index' itself on the paths whose index
|
||||
@@ -308,7 +312,7 @@ Configuration
|
||||
-------------
|
||||
|
||||
The command honors `core.filemode` configuration variable. If
|
||||
your repository is on an filesystem whose executable bits are
|
||||
your repository is on a filesystem whose executable bits are
|
||||
unreliable, this should be set to 'false' (see linkgit:git-config[1]).
|
||||
This causes the command to ignore differences in file modes recorded
|
||||
in the index and the file mode on the filesystem if they differ only on
|
||||
|
||||
@@ -43,9 +43,10 @@ unreleased) version of git, that is available from 'master'
|
||||
branch of the `git.git` repository.
|
||||
Documentation for older releases are available here:
|
||||
|
||||
* link:v1.6.5.2/git.html[documentation for release 1.6.5.2]
|
||||
* link:v1.6.5.3/git.html[documentation for release 1.6.5.3]
|
||||
|
||||
* release notes for
|
||||
link:RelNotes-1.6.5.3.txt[1.6.5.3],
|
||||
link:RelNotes-1.6.5.2.txt[1.6.5.2],
|
||||
link:RelNotes-1.6.5.1.txt[1.6.5.1],
|
||||
link:RelNotes-1.6.5.txt[1.6.5].
|
||||
|
||||
@@ -993,7 +993,7 @@ would be different)
|
||||
|
||||
----------------
|
||||
Updating from ae3a2da... to a80b4aa....
|
||||
Fast forward (no commit created; -m option ignored)
|
||||
Fast-forward (no commit created; -m option ignored)
|
||||
example | 1 +
|
||||
hello | 1 +
|
||||
2 files changed, 2 insertions(+), 0 deletions(-)
|
||||
@@ -1003,7 +1003,7 @@ Because your branch did not contain anything more than what had
|
||||
already been merged into the `master` branch, the merge operation did
|
||||
not actually do a merge. Instead, it just updated the top of
|
||||
the tree of your branch to that of the `master` branch. This is
|
||||
often called 'fast forward' merge.
|
||||
often called 'fast-forward' merge.
|
||||
|
||||
You can run `gitk \--all` again to see how the commit ancestry
|
||||
looks like, or run 'show-branch', which tells you this.
|
||||
|
||||
@@ -229,7 +229,7 @@ from updating that ref.
|
||||
This hook can be used to prevent 'forced' update on certain refs by
|
||||
making sure that the object name is a commit object that is a
|
||||
descendant of the commit object named by the old object name.
|
||||
That is, to enforce a "fast forward only" policy.
|
||||
That is, to enforce a "fast-forward only" policy.
|
||||
|
||||
It could also be used to log the old..new status. However, it
|
||||
does not know the entire set of branches, so it would end up
|
||||
|
||||
@@ -124,7 +124,7 @@ to point at the new commit.
|
||||
An evil merge is a <<def_merge,merge>> that introduces changes that
|
||||
do not appear in any <<def_parent,parent>>.
|
||||
|
||||
[[def_fast_forward]]fast forward::
|
||||
[[def_fast_forward]]fast-forward::
|
||||
A fast-forward is a special type of <<def_merge,merge>> where you have a
|
||||
<<def_revision,revision>> and you are "merging" another
|
||||
<<def_branch,branch>>'s changes that happen to be a descendant of what
|
||||
@@ -220,7 +220,7 @@ to point at the new commit.
|
||||
conflict, manual intervention may be required to complete the
|
||||
merge.
|
||||
+
|
||||
As a noun: unless it is a <<def_fast_forward,fast forward>>, a
|
||||
As a noun: unless it is a <<def_fast_forward,fast-forward>>, a
|
||||
successful merge results in the creation of a new <<def_commit,commit>>
|
||||
representing the result of the merge, and having as
|
||||
<<def_parent,parents>> the tips of the merged <<def_branch,branches>>.
|
||||
|
||||
@@ -59,7 +59,7 @@ The policy.
|
||||
not yet pass the criteria set for 'next'.
|
||||
|
||||
- The tips of 'master', 'maint' and 'next' branches will always
|
||||
fast forward, to allow people to build their own
|
||||
fast-forward, to allow people to build their own
|
||||
customization on top of them.
|
||||
|
||||
- Usually 'master' contains all of 'maint', 'next' contains all
|
||||
|
||||
@@ -85,7 +85,7 @@ Fortunately I did not have to; what I have in the current branch
|
||||
|
||||
------------------------------------------------
|
||||
$ git checkout master
|
||||
$ git merge revert-c99 ;# this should be a fast forward
|
||||
$ git merge revert-c99 ;# this should be a fast-forward
|
||||
Updating from 10d781b9caa4f71495c7b34963bef137216f86a8 to e3a693c...
|
||||
cache.h | 8 ++++----
|
||||
commit.c | 2 +-
|
||||
@@ -95,7 +95,7 @@ Updating from 10d781b9caa4f71495c7b34963bef137216f86a8 to e3a693c...
|
||||
5 files changed, 8 insertions(+), 8 deletions(-)
|
||||
------------------------------------------------
|
||||
|
||||
There is no need to redo the test at this point. We fast forwarded
|
||||
There is no need to redo the test at this point. We fast-forwarded
|
||||
and we know 'master' matches 'revert-c99' exactly. In fact:
|
||||
|
||||
------------------------------------------------
|
||||
|
||||
@@ -76,7 +76,7 @@ case "$1" in
|
||||
if expr "$2" : '0*$' >/dev/null; then
|
||||
info "The branch '$1' is new..."
|
||||
else
|
||||
# updating -- make sure it is a fast forward
|
||||
# updating -- make sure it is a fast-forward
|
||||
mb=$(git-merge-base "$2" "$3")
|
||||
case "$mb,$2" in
|
||||
"$2,$mb") info "Update is fast-forward" ;;
|
||||
|
||||
@@ -23,7 +23,7 @@ merge.tool::
|
||||
Controls which merge resolution program is used by
|
||||
linkgit:git-mergetool[1]. Valid built-in values are: "kdiff3",
|
||||
"tkdiff", "meld", "xxdiff", "emerge", "vimdiff", "gvimdiff",
|
||||
"diffuse", "ecmerge", "tortoisemerge", "araxis", and
|
||||
"diffuse", "ecmerge", "tortoisemerge", "p4merge", "araxis" and
|
||||
"opendiff". Any other value is treated is custom merge tool
|
||||
and there must be a corresponding mergetool.<tool>.cmd option.
|
||||
|
||||
|
||||
@@ -49,6 +49,11 @@ merge.
|
||||
With --no-squash perform the merge and commit the result. This
|
||||
option can be used to override --squash.
|
||||
|
||||
--ff-only::
|
||||
Refuse to merge and exit with a non-zero status unless the
|
||||
current `HEAD` is already up-to-date or the merge can be
|
||||
resolved as a fast-forward.
|
||||
|
||||
-s <strategy>::
|
||||
--strategy=<strategy>::
|
||||
Use the given merge strategy; can be supplied more than
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
+
|
||||
The remote ref that matches <src>
|
||||
is fetched, and if <dst> is not empty string, the local
|
||||
ref that matches it is fast forwarded using <src>.
|
||||
ref that matches it is fast-forwarded using <src>.
|
||||
If the optional plus `+` is used, the local ref
|
||||
is updated even if it does not result in a fast forward
|
||||
is updated even if it does not result in a fast-forward
|
||||
update.
|
||||
+
|
||||
[NOTE]
|
||||
|
||||
@@ -1384,7 +1384,7 @@ were merged.
|
||||
|
||||
However, if the current branch is a descendant of the other--so every
|
||||
commit present in the one is already contained in the other--then git
|
||||
just performs a "fast forward"; the head of the current branch is moved
|
||||
just performs a "fast-forward"; the head of the current branch is moved
|
||||
forward to point at the head of the merged-in branch, without any new
|
||||
commits being created.
|
||||
|
||||
@@ -1719,7 +1719,7 @@ producing a default commit message documenting the branch and
|
||||
repository that you pulled from.
|
||||
|
||||
(But note that no such commit will be created in the case of a
|
||||
<<fast-forwards,fast forward>>; instead, your branch will just be
|
||||
<<fast-forwards,fast-forward>>; instead, your branch will just be
|
||||
updated to point to the latest commit from the upstream branch.)
|
||||
|
||||
The `git pull` command can also be given "." as the "remote" repository,
|
||||
@@ -1943,7 +1943,7 @@ $ git push ssh://yourserver.com/~you/proj.git master
|
||||
-------------------------------------------------
|
||||
|
||||
As with `git fetch`, `git push` will complain if this does not result in a
|
||||
<<fast-forwards,fast forward>>; see the following section for details on
|
||||
<<fast-forwards,fast-forward>>; see the following section for details on
|
||||
handling this case.
|
||||
|
||||
Note that the target of a "push" is normally a
|
||||
@@ -1976,7 +1976,7 @@ details.
|
||||
What to do when a push fails
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If a push would not result in a <<fast-forwards,fast forward>> of the
|
||||
If a push would not result in a <<fast-forwards,fast-forward>> of the
|
||||
remote branch, then it will fail with an error like:
|
||||
|
||||
-------------------------------------------------
|
||||
@@ -2115,7 +2115,7 @@ $ git checkout release && git pull
|
||||
|
||||
Important note! If you have any local changes in these branches, then
|
||||
this merge will create a commit object in the history (with no local
|
||||
changes git will simply do a "Fast forward" merge). Many people dislike
|
||||
changes git will simply do a "fast-forward" merge). Many people dislike
|
||||
the "noise" that this creates in the Linux history, so you should avoid
|
||||
doing this capriciously in the "release" branch, as these noisy commits
|
||||
will become part of the permanent history when you ask Linus to pull
|
||||
@@ -2729,9 +2729,9 @@ In the previous example, when updating an existing branch, "git fetch"
|
||||
checks to make sure that the most recent commit on the remote
|
||||
branch is a descendant of the most recent commit on your copy of the
|
||||
branch before updating your copy of the branch to point at the new
|
||||
commit. Git calls this process a <<fast-forwards,fast forward>>.
|
||||
commit. Git calls this process a <<fast-forwards,fast-forward>>.
|
||||
|
||||
A fast forward looks something like this:
|
||||
A fast-forward looks something like this:
|
||||
|
||||
................................................
|
||||
o--o--o--o <-- old head of the branch
|
||||
|
||||
5
Makefile
5
Makefile
@@ -1806,7 +1806,10 @@ dist: git.spec git-archive$(X) configure
|
||||
gzip -f -9 $(GIT_TARNAME).tar
|
||||
|
||||
rpm: dist
|
||||
$(RPMBUILD) -ta $(GIT_TARNAME).tar.gz
|
||||
$(RPMBUILD) \
|
||||
--define "_source_filedigest_algorithm md5" \
|
||||
--define "_binary_filedigest_algorithm md5" \
|
||||
-ta $(GIT_TARNAME).tar.gz
|
||||
|
||||
htmldocs = git-htmldocs-$(GIT_VERSION)
|
||||
manpages = git-manpages-$(GIT_VERSION)
|
||||
|
||||
@@ -1604,6 +1604,9 @@ static void emit_porcelain(struct scoreboard *sb, struct blame_entry *ent)
|
||||
} while (ch != '\n' &&
|
||||
cp < sb->final_buf + sb->final_buf_size);
|
||||
}
|
||||
|
||||
if (sb->final_buf_size && cp[-1] != '\n')
|
||||
putchar('\n');
|
||||
}
|
||||
|
||||
static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt)
|
||||
@@ -1667,6 +1670,9 @@ static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt)
|
||||
} while (ch != '\n' &&
|
||||
cp < sb->final_buf + sb->final_buf_size);
|
||||
}
|
||||
|
||||
if (sb->final_buf_size && cp[-1] != '\n')
|
||||
putchar('\n');
|
||||
}
|
||||
|
||||
static void output(struct scoreboard *sb, int option)
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
#include "builtin.h"
|
||||
#include "strbuf.h"
|
||||
|
||||
static const char builtin_check_ref_format_usage[] =
|
||||
"git check-ref-format [--print] <refname>\n"
|
||||
" or: git check-ref-format --branch <branchname-shorthand>";
|
||||
|
||||
/*
|
||||
* Replace each run of adjacent slashes in src with a single slash,
|
||||
* and write the result to dst.
|
||||
@@ -49,6 +53,6 @@ int cmd_check_ref_format(int argc, const char **argv, const char *prefix)
|
||||
exit(0);
|
||||
}
|
||||
if (argc != 2)
|
||||
usage("git check-ref-format refname");
|
||||
usage(builtin_check_ref_format_usage);
|
||||
return !!check_ref_format(argv[1]);
|
||||
}
|
||||
|
||||
@@ -530,7 +530,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
|
||||
for (i = sb.len - 1; i > 0 && sb.buf[i - 1] != '\n'; i--)
|
||||
; /* do nothing */
|
||||
if (prefixcmp(sb.buf + i, sob.buf)) {
|
||||
if (!ends_rfc2822_footer(&sb))
|
||||
if (!i || !ends_rfc2822_footer(&sb))
|
||||
strbuf_addch(&sb, '\n');
|
||||
strbuf_addbuf(&sb, &sob);
|
||||
}
|
||||
|
||||
@@ -5,12 +5,14 @@
|
||||
#include "builtin.h"
|
||||
#include "exec_cmd.h"
|
||||
#include "parse-options.h"
|
||||
#include "diff.h"
|
||||
|
||||
#define SEEN (1u<<0)
|
||||
#define MAX_TAGS (FLAG_BITS - 1)
|
||||
|
||||
static const char * const describe_usage[] = {
|
||||
"git describe [options] <committish>*",
|
||||
"git describe [options] --dirty",
|
||||
NULL
|
||||
};
|
||||
|
||||
@@ -23,6 +25,13 @@ static int max_candidates = 10;
|
||||
static int found_names;
|
||||
static const char *pattern;
|
||||
static int always;
|
||||
static const char *dirty;
|
||||
|
||||
/* diff-index command arguments to check if working tree is dirty. */
|
||||
static const char *diff_index_args[] = {
|
||||
"diff-index", "--quiet", "HEAD", "--", NULL
|
||||
};
|
||||
|
||||
|
||||
struct commit_name {
|
||||
struct tag *tag;
|
||||
@@ -96,8 +105,6 @@ static int get_name(const char *path, const unsigned char *sha1, int flag, void
|
||||
if (!all) {
|
||||
if (!prio)
|
||||
return 0;
|
||||
if (!tags && prio < 2)
|
||||
return 0;
|
||||
}
|
||||
add_to_known_names(all ? path + 5 : path + 10, commit, prio, sha1);
|
||||
return 0;
|
||||
@@ -184,6 +191,7 @@ static void describe(const char *arg, int last_one)
|
||||
struct possible_tag all_matches[MAX_TAGS];
|
||||
unsigned int match_cnt = 0, annotated_cnt = 0, cur_match;
|
||||
unsigned long seen_commits = 0;
|
||||
unsigned int unannotated_cnt = 0;
|
||||
|
||||
if (get_sha1(arg, sha1))
|
||||
die("Not a valid object name %s", arg);
|
||||
@@ -199,6 +207,8 @@ static void describe(const char *arg, int last_one)
|
||||
display_name(n);
|
||||
if (longformat)
|
||||
show_suffix(0, n->tag ? n->tag->tagged->sha1 : sha1);
|
||||
if (dirty)
|
||||
printf("%s", dirty);
|
||||
printf("\n");
|
||||
return;
|
||||
}
|
||||
@@ -217,7 +227,9 @@ static void describe(const char *arg, int last_one)
|
||||
seen_commits++;
|
||||
n = c->util;
|
||||
if (n) {
|
||||
if (match_cnt < max_candidates) {
|
||||
if (!tags && !all && n->prio < 2) {
|
||||
unannotated_cnt++;
|
||||
} else if (match_cnt < max_candidates) {
|
||||
struct possible_tag *t = &all_matches[match_cnt++];
|
||||
t->name = n;
|
||||
t->depth = seen_commits - 1;
|
||||
@@ -256,10 +268,20 @@ static void describe(const char *arg, int last_one)
|
||||
if (!match_cnt) {
|
||||
const unsigned char *sha1 = cmit->object.sha1;
|
||||
if (always) {
|
||||
printf("%s\n", find_unique_abbrev(sha1, abbrev));
|
||||
printf("%s", find_unique_abbrev(sha1, abbrev));
|
||||
if (dirty)
|
||||
printf("%s", dirty);
|
||||
printf("\n");
|
||||
return;
|
||||
}
|
||||
die("cannot describe '%s'", sha1_to_hex(sha1));
|
||||
if (unannotated_cnt)
|
||||
die("No annotated tags can describe '%s'.\n"
|
||||
"However, there were unannotated tags: try --tags.",
|
||||
sha1_to_hex(sha1));
|
||||
else
|
||||
die("No tags can describe '%s'.\n"
|
||||
"Try --always, or create some tags.",
|
||||
sha1_to_hex(sha1));
|
||||
}
|
||||
|
||||
qsort(all_matches, match_cnt, sizeof(all_matches[0]), compare_pt);
|
||||
@@ -291,6 +313,8 @@ static void describe(const char *arg, int last_one)
|
||||
display_name(all_matches[0].name);
|
||||
if (abbrev)
|
||||
show_suffix(all_matches[0].depth, cmit->object.sha1);
|
||||
if (dirty)
|
||||
printf("%s", dirty);
|
||||
printf("\n");
|
||||
|
||||
if (!last_one)
|
||||
@@ -315,6 +339,9 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
|
||||
"only consider tags matching <pattern>"),
|
||||
OPT_BOOLEAN(0, "always", &always,
|
||||
"show abbreviated commit object as fallback"),
|
||||
{OPTION_STRING, 0, "dirty", &dirty, "mark",
|
||||
"append <mark> on dirty working tree (default: \"-dirty\")",
|
||||
PARSE_OPT_OPTARG, NULL, (intptr_t) "-dirty"},
|
||||
OPT_END(),
|
||||
};
|
||||
|
||||
@@ -355,7 +382,11 @@ int cmd_describe(int argc, const char **argv, const char *prefix)
|
||||
die("No names found, cannot describe anything.");
|
||||
|
||||
if (argc == 0) {
|
||||
if (dirty && !cmd_diff_index(ARRAY_SIZE(diff_index_args) - 1, diff_index_args, prefix))
|
||||
dirty = NULL;
|
||||
describe("HEAD", 1);
|
||||
} else if (dirty) {
|
||||
die("--dirty is incompatible with committishes");
|
||||
} else {
|
||||
while (argc-- > 0) {
|
||||
describe(*argv++, argc == 0);
|
||||
|
||||
@@ -97,21 +97,21 @@ static int update_local_ref(const char *name,
|
||||
strcpy(newh, find_unique_abbrev(sha1_new, DEFAULT_ABBREV));
|
||||
|
||||
if (in_merge_bases(current, &updated, 1)) {
|
||||
fprintf(stderr, "* %s: fast forward to %s\n",
|
||||
fprintf(stderr, "* %s: fast-forward to %s\n",
|
||||
name, note);
|
||||
fprintf(stderr, " old..new: %s..%s\n", oldh, newh);
|
||||
return update_ref_env("fast forward", name, sha1_new, sha1_old);
|
||||
return update_ref_env("fast-forward", name, sha1_new, sha1_old);
|
||||
}
|
||||
if (!force) {
|
||||
fprintf(stderr,
|
||||
"* %s: not updating to non-fast forward %s\n",
|
||||
"* %s: not updating to non-fast-forward %s\n",
|
||||
name, note);
|
||||
fprintf(stderr,
|
||||
" old...new: %s...%s\n", oldh, newh);
|
||||
return 1;
|
||||
}
|
||||
fprintf(stderr,
|
||||
"* %s: forcing update to non-fast forward %s\n",
|
||||
"* %s: forcing update to non-fast-forward %s\n",
|
||||
name, note);
|
||||
fprintf(stderr, " old...new: %s...%s\n", oldh, newh);
|
||||
return update_ref_env("forced-update", name, sha1_new, sha1_old);
|
||||
|
||||
@@ -269,7 +269,7 @@ static int update_local_ref(struct ref *ref,
|
||||
strcpy(quickref, find_unique_abbrev(current->object.sha1, DEFAULT_ABBREV));
|
||||
strcat(quickref, "..");
|
||||
strcat(quickref, find_unique_abbrev(ref->new_sha1, DEFAULT_ABBREV));
|
||||
r = s_update_ref("fast forward", ref, 1);
|
||||
r = s_update_ref("fast-forward", ref, 1);
|
||||
sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : ' ',
|
||||
SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote,
|
||||
pretty_ref, r ? " (unable to update local ref)" : "");
|
||||
@@ -287,7 +287,7 @@ static int update_local_ref(struct ref *ref,
|
||||
r ? "unable to update local ref" : "forced update");
|
||||
return r;
|
||||
} else {
|
||||
sprintf(display, "! %-*s %-*s -> %s (non fast forward)",
|
||||
sprintf(display, "! %-*s %-*s -> %s (non-fast-forward)",
|
||||
SUMMARY_WIDTH, "[rejected]", REFCOL_WIDTH, remote,
|
||||
pretty_ref);
|
||||
return 1;
|
||||
|
||||
@@ -891,6 +891,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||
struct patch_ids ids;
|
||||
char *add_signoff = NULL;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
int use_patch_format = 0;
|
||||
const struct option builtin_format_patch_options[] = {
|
||||
{ OPTION_CALLBACK, 'n', "numbered", &numbered, NULL,
|
||||
"use [PATCH n/m] even with a single patch",
|
||||
@@ -920,6 +921,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||
PARSE_OPT_NOARG | PARSE_OPT_NONEG, keep_callback },
|
||||
OPT_BOOLEAN(0, "no-binary", &no_binary_diff,
|
||||
"don't output binary diffs"),
|
||||
OPT_BOOLEAN('p', NULL, &use_patch_format,
|
||||
"show patch format instead of default (patch + stat)"),
|
||||
OPT_BOOLEAN(0, "ignore-if-in-upstream", &ignore_if_in_upstream,
|
||||
"don't include a patch matching a commit upstream"),
|
||||
OPT_GROUP("Messaging"),
|
||||
@@ -1027,8 +1030,10 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
||||
if (argc > 1)
|
||||
die ("unrecognized argument: %s", argv[1]);
|
||||
|
||||
if (!rev.diffopt.output_format
|
||||
|| rev.diffopt.output_format == DIFF_FORMAT_PATCH)
|
||||
if (use_patch_format)
|
||||
rev.diffopt.output_format |= DIFF_FORMAT_PATCH;
|
||||
else if (!rev.diffopt.output_format ||
|
||||
rev.diffopt.output_format == DIFF_FORMAT_PATCH)
|
||||
rev.diffopt.output_format = DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_SUMMARY | DIFF_FORMAT_PATCH;
|
||||
|
||||
if (!DIFF_OPT_TST(&rev.diffopt, TEXT) && !no_binary_diff)
|
||||
|
||||
@@ -170,6 +170,10 @@ static void show_files(struct dir_struct *dir, const char *prefix)
|
||||
if (show_cached | show_stage) {
|
||||
for (i = 0; i < active_nr; i++) {
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
int dtype = ce_to_dtype(ce);
|
||||
if (dir->flags & DIR_SHOW_IGNORED &&
|
||||
!excluded(dir, ce->name, &dtype))
|
||||
continue;
|
||||
if (show_unmerged && !ce_stage(ce))
|
||||
continue;
|
||||
if (ce->ce_flags & CE_UPDATE)
|
||||
@@ -182,6 +186,10 @@ static void show_files(struct dir_struct *dir, const char *prefix)
|
||||
struct cache_entry *ce = active_cache[i];
|
||||
struct stat st;
|
||||
int err;
|
||||
int dtype = ce_to_dtype(ce);
|
||||
if (dir->flags & DIR_SHOW_IGNORED &&
|
||||
!excluded(dir, ce->name, &dtype))
|
||||
continue;
|
||||
if (ce->ce_flags & CE_UPDATE)
|
||||
continue;
|
||||
err = lstat(ce->name, &st);
|
||||
|
||||
@@ -43,6 +43,7 @@ static const char * const builtin_merge_usage[] = {
|
||||
|
||||
static int show_diffstat = 1, option_log, squash;
|
||||
static int option_commit = 1, allow_fast_forward = 1;
|
||||
static int fast_forward_only;
|
||||
static int allow_trivial = 1, have_message;
|
||||
static struct strbuf merge_msg;
|
||||
static struct commit_list *remoteheads;
|
||||
@@ -166,7 +167,9 @@ static struct option builtin_merge_options[] = {
|
||||
OPT_BOOLEAN(0, "commit", &option_commit,
|
||||
"perform a commit if the merge succeeds (default)"),
|
||||
OPT_BOOLEAN(0, "ff", &allow_fast_forward,
|
||||
"allow fast forward (default)"),
|
||||
"allow fast-forward (default)"),
|
||||
OPT_BOOLEAN(0, "ff-only", &fast_forward_only,
|
||||
"abort if fast-forward is not possible"),
|
||||
OPT_CALLBACK('s', "strategy", &use_strategies, "strategy",
|
||||
"merge strategy to use", option_parse_strategy),
|
||||
OPT_CALLBACK('m', "message", &merge_msg, "message",
|
||||
@@ -843,7 +846,6 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
const char *best_strategy = NULL, *wt_strategy = NULL;
|
||||
struct commit_list **remotes = &remoteheads;
|
||||
|
||||
setup_work_tree();
|
||||
if (file_exists(git_path("MERGE_HEAD")))
|
||||
die("You have not concluded your merge. (MERGE_HEAD exists)");
|
||||
if (read_cache_unmerged())
|
||||
@@ -877,6 +879,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
option_commit = 0;
|
||||
}
|
||||
|
||||
if (!allow_fast_forward && fast_forward_only)
|
||||
die("You cannot combine --no-ff with --ff-only.");
|
||||
|
||||
if (!argc)
|
||||
usage_with_options(builtin_merge_usage,
|
||||
builtin_merge_options);
|
||||
@@ -1016,7 +1021,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
hex,
|
||||
find_unique_abbrev(remoteheads->item->object.sha1,
|
||||
DEFAULT_ABBREV));
|
||||
strbuf_addstr(&msg, "Fast forward");
|
||||
strbuf_addstr(&msg, "Fast-forward");
|
||||
if (have_message)
|
||||
strbuf_addstr(&msg,
|
||||
" (no commit created; -m option ignored)");
|
||||
@@ -1034,16 +1039,16 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
} else if (!remoteheads->next && common->next)
|
||||
;
|
||||
/*
|
||||
* We are not doing octopus and not fast forward. Need
|
||||
* We are not doing octopus and not fast-forward. Need
|
||||
* a real merge.
|
||||
*/
|
||||
else if (!remoteheads->next && !common->next && option_commit) {
|
||||
/*
|
||||
* We are not doing octopus, not fast forward, and have
|
||||
* We are not doing octopus, not fast-forward, and have
|
||||
* only one common.
|
||||
*/
|
||||
refresh_cache(REFRESH_QUIET);
|
||||
if (allow_trivial) {
|
||||
if (allow_trivial && !fast_forward_only) {
|
||||
/* See if it is really trivial. */
|
||||
git_committer_info(IDENT_ERROR_ON_NO_NAME);
|
||||
printf("Trying really trivial in-index merge...\n");
|
||||
@@ -1082,6 +1087,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
}
|
||||
|
||||
if (fast_forward_only)
|
||||
die("Not possible to fast-forward, aborting.");
|
||||
|
||||
/* We are going to make a new commit. */
|
||||
git_committer_info(IDENT_ERROR_ON_NO_NAME);
|
||||
|
||||
|
||||
@@ -1629,6 +1629,8 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size,
|
||||
struct thread_params *p;
|
||||
int i, ret, active_threads = 0;
|
||||
|
||||
if (!delta_search_threads) /* --threads=0 means autodetect */
|
||||
delta_search_threads = online_cpus();
|
||||
if (delta_search_threads <= 1) {
|
||||
find_deltas(list, &list_size, window, depth, processed);
|
||||
return;
|
||||
@@ -2324,11 +2326,6 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
|
||||
if (keep_unreachable && unpack_unreachable)
|
||||
die("--keep-unreachable and --unpack-unreachable are incompatible.");
|
||||
|
||||
#ifdef THREADED_DELTA_SEARCH
|
||||
if (!delta_search_threads) /* --threads=0 means autodetect */
|
||||
delta_search_threads = online_cpus();
|
||||
#endif
|
||||
|
||||
prepare_packed_git();
|
||||
|
||||
if (progress)
|
||||
|
||||
@@ -66,7 +66,6 @@ static void setup_push_tracking(void)
|
||||
|
||||
static void setup_default_push_refspecs(void)
|
||||
{
|
||||
git_config(git_default_config, NULL);
|
||||
switch (push_default) {
|
||||
default:
|
||||
case PUSH_DEFAULT_MATCHING:
|
||||
@@ -159,7 +158,7 @@ static int do_push(const char *repo, int flags)
|
||||
error("failed to push some refs to '%s'", url[i]);
|
||||
if (nonfastforward && advice_push_nonfastforward) {
|
||||
printf("To prevent you from losing history, non-fast-forward updates were rejected\n"
|
||||
"Merge the remote changes before pushing again. See the 'non-fast forward'\n"
|
||||
"Merge the remote changes before pushing again. See the 'non-fast-forward'\n"
|
||||
"section of 'git push --help' for details.\n");
|
||||
}
|
||||
errs++;
|
||||
@@ -173,7 +172,6 @@ int cmd_push(int argc, const char **argv, const char *prefix)
|
||||
int tags = 0;
|
||||
int rc;
|
||||
const char *repo = NULL; /* default repository */
|
||||
|
||||
struct option options[] = {
|
||||
OPT_BIT('q', "quiet", &flags, "be quiet", TRANSPORT_PUSH_QUIET),
|
||||
OPT_BIT('v', "verbose", &flags, "be verbose", TRANSPORT_PUSH_VERBOSE),
|
||||
@@ -191,6 +189,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
git_config(git_default_config, NULL);
|
||||
argc = parse_options(argc, argv, prefix, options, push_usage, 0);
|
||||
|
||||
if (tags)
|
||||
|
||||
@@ -341,9 +341,9 @@ static const char *update(struct command *cmd)
|
||||
break;
|
||||
free_commit_list(bases);
|
||||
if (!ent) {
|
||||
error("denying non-fast forward %s"
|
||||
error("denying non-fast-forward %s"
|
||||
" (you should pull first)", name);
|
||||
return "non-fast forward";
|
||||
return "non-fast-forward";
|
||||
}
|
||||
}
|
||||
if (run_update_hook(cmd)) {
|
||||
|
||||
@@ -953,7 +953,7 @@ static int show_push_info_item(struct string_list_item *item, void *cb_data)
|
||||
status = "up to date";
|
||||
break;
|
||||
case PUSH_STATUS_FASTFORWARD:
|
||||
status = "fast forwardable";
|
||||
status = "fast-forwardable";
|
||||
break;
|
||||
case PUSH_STATUS_OUTOFDATE:
|
||||
status = "local out of date";
|
||||
|
||||
@@ -320,6 +320,8 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
|
||||
|
||||
memset(&info, 0, sizeof(info));
|
||||
info.revs = &revs;
|
||||
if (revs.bisect)
|
||||
bisect_list = 1;
|
||||
|
||||
quiet = DIFF_OPT_TST(&revs.diffopt, QUIET);
|
||||
for (i = 1 ; i < argc; i++) {
|
||||
|
||||
@@ -180,6 +180,12 @@ static int show_reference(const char *refname, const unsigned char *sha1, int fl
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int anti_reference(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
|
||||
{
|
||||
show_rev(REVERSED, sha1, refname);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void show_datestring(const char *flag, const char *datestr)
|
||||
{
|
||||
static char buffer[100];
|
||||
@@ -548,6 +554,11 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
|
||||
for_each_ref(show_reference, NULL);
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--bisect")) {
|
||||
for_each_ref_in("refs/bisect/bad", show_reference, NULL);
|
||||
for_each_ref_in("refs/bisect/good", anti_reference, NULL);
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--branches")) {
|
||||
for_each_branch_ref(show_reference, NULL);
|
||||
continue;
|
||||
|
||||
@@ -246,7 +246,7 @@ static int print_one_push_status(struct ref *ref, const char *dest, int count)
|
||||
break;
|
||||
case REF_STATUS_REJECT_NONFASTFORWARD:
|
||||
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
|
||||
"non-fast forward");
|
||||
"non-fast-forward");
|
||||
break;
|
||||
case REF_STATUS_REMOTE_REJECT:
|
||||
print_ref_status('!', "[remote rejected]", ref,
|
||||
|
||||
@@ -953,7 +953,7 @@ _git_diff ()
|
||||
}
|
||||
|
||||
__git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
|
||||
tkdiff vimdiff gvimdiff xxdiff araxis
|
||||
tkdiff vimdiff gvimdiff xxdiff araxis p4merge
|
||||
"
|
||||
|
||||
_git_difftool ()
|
||||
@@ -1224,7 +1224,7 @@ _git_log ()
|
||||
|
||||
__git_merge_options="
|
||||
--no-commit --no-stat --log --no-log --squash --strategy
|
||||
--commit --stat --no-squash --ff --no-ff
|
||||
--commit --stat --no-squash --ff --no-ff --ff-only
|
||||
"
|
||||
|
||||
_git_merge ()
|
||||
|
||||
@@ -14,7 +14,7 @@ summary (synonym to --stat)
|
||||
log add list of one-line log to merge commit message
|
||||
squash create a single commit instead of doing a merge
|
||||
commit perform a commit if the merge succeeds (default)
|
||||
ff allow fast forward (default)
|
||||
ff allow fast-forward (default)
|
||||
s,strategy= merge strategy to use
|
||||
m,message= message to be used for the merge commit (if any)
|
||||
"
|
||||
@@ -353,7 +353,7 @@ t,1,"$head",*)
|
||||
# Again the most common case of merging one remote.
|
||||
echo "Updating $(git rev-parse --short $head)..$(git rev-parse --short $1)"
|
||||
git update-index --refresh 2>/dev/null
|
||||
msg="Fast forward"
|
||||
msg="Fast-forward"
|
||||
if test -n "$have_message"
|
||||
then
|
||||
msg="$msg (no commit created; -m option ignored)"
|
||||
@@ -365,11 +365,11 @@ t,1,"$head",*)
|
||||
exit 0
|
||||
;;
|
||||
?,1,?*"$LF"?*,*)
|
||||
# We are not doing octopus and not fast forward. Need a
|
||||
# We are not doing octopus and not fast-forward. Need a
|
||||
# real merge.
|
||||
;;
|
||||
?,1,*,)
|
||||
# We are not doing octopus, not fast forward, and have only
|
||||
# We are not doing octopus, not fast-forward, and have only
|
||||
# one common.
|
||||
git update-index --refresh 2>/dev/null
|
||||
case "$allow_trivial_merge" in
|
||||
|
||||
@@ -48,7 +48,7 @@ case "$common" in
|
||||
"$head")
|
||||
echo "Updating $(git rev-parse --short $head)..$(git rev-parse --short $merge)"
|
||||
git read-tree -u -m $head $merge || exit 1
|
||||
git update-ref -m "resolve $merge_name: Fast forward" \
|
||||
git update-ref -m "resolve $merge_name: Fast-forward" \
|
||||
HEAD "$merge" "$head"
|
||||
git diff-tree -p $head $merge | git apply --stat
|
||||
dropheads
|
||||
|
||||
@@ -315,8 +315,8 @@ generate_update_branch_email()
|
||||
# "remotes/" will be ignored as well.
|
||||
|
||||
# List all of the revisions that were removed by this update, in a
|
||||
# fast forward update, this list will be empty, because rev-list O
|
||||
# ^N is empty. For a non fast forward, O ^N is the list of removed
|
||||
# fast-forward update, this list will be empty, because rev-list O
|
||||
# ^N is empty. For a non-fast-forward, O ^N is the list of removed
|
||||
# revisions
|
||||
fast_forward=""
|
||||
rev=""
|
||||
@@ -411,7 +411,7 @@ generate_update_branch_email()
|
||||
# revision because the base is effectively a random revision at this
|
||||
# point - the user will be interested in what this revision changed
|
||||
# - including the undoing of previous revisions in the case of
|
||||
# non-fast forward updates.
|
||||
# non-fast-forward updates.
|
||||
echo ""
|
||||
echo "Summary of changes:"
|
||||
git diff-tree --stat --summary --find-copies-harder $oldrev..$newrev
|
||||
|
||||
20
diff.c
20
diff.c
@@ -686,14 +686,18 @@ static void diff_words_show(struct diff_words_data *diff_words)
|
||||
diff_words->minus.text.size = diff_words->plus.text.size = 0;
|
||||
}
|
||||
|
||||
/* In "color-words" mode, show word-diff of words accumulated in the buffer */
|
||||
static void diff_words_flush(struct emit_callback *ecbdata)
|
||||
{
|
||||
if (ecbdata->diff_words->minus.text.size ||
|
||||
ecbdata->diff_words->plus.text.size)
|
||||
diff_words_show(ecbdata->diff_words);
|
||||
}
|
||||
|
||||
static void free_diff_words_data(struct emit_callback *ecbdata)
|
||||
{
|
||||
if (ecbdata->diff_words) {
|
||||
/* flush buffers */
|
||||
if (ecbdata->diff_words->minus.text.size ||
|
||||
ecbdata->diff_words->plus.text.size)
|
||||
diff_words_show(ecbdata->diff_words);
|
||||
|
||||
diff_words_flush(ecbdata);
|
||||
free (ecbdata->diff_words->minus.text.ptr);
|
||||
free (ecbdata->diff_words->minus.orig);
|
||||
free (ecbdata->diff_words->plus.text.ptr);
|
||||
@@ -773,6 +777,8 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
|
||||
}
|
||||
|
||||
if (line[0] == '@') {
|
||||
if (ecbdata->diff_words)
|
||||
diff_words_flush(ecbdata);
|
||||
len = sane_truncate_line(ecbdata, line, len);
|
||||
find_lno(line, ecbdata);
|
||||
emit_line(ecbdata->file,
|
||||
@@ -798,9 +804,7 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
|
||||
&ecbdata->diff_words->plus);
|
||||
return;
|
||||
}
|
||||
if (ecbdata->diff_words->minus.text.size ||
|
||||
ecbdata->diff_words->plus.text.size)
|
||||
diff_words_show(ecbdata->diff_words);
|
||||
diff_words_flush(ecbdata);
|
||||
line++;
|
||||
len--;
|
||||
emit_line(ecbdata->file, plain, reset, line, len);
|
||||
|
||||
@@ -731,14 +731,17 @@ sub parse_diff_header {
|
||||
|
||||
my $head = { TEXT => [], DISPLAY => [], TYPE => 'header' };
|
||||
my $mode = { TEXT => [], DISPLAY => [], TYPE => 'mode' };
|
||||
my $deletion = { TEXT => [], DISPLAY => [], TYPE => 'deletion' };
|
||||
|
||||
for (my $i = 0; $i < @{$src->{TEXT}}; $i++) {
|
||||
my $dest = $src->{TEXT}->[$i] =~ /^(old|new) mode (\d+)$/ ?
|
||||
$mode : $head;
|
||||
my $dest =
|
||||
$src->{TEXT}->[$i] =~ /^(old|new) mode (\d+)$/ ? $mode :
|
||||
$src->{TEXT}->[$i] =~ /^deleted file/ ? $deletion :
|
||||
$head;
|
||||
push @{$dest->{TEXT}}, $src->{TEXT}->[$i];
|
||||
push @{$dest->{DISPLAY}}, $src->{DISPLAY}->[$i];
|
||||
}
|
||||
return ($head, $mode);
|
||||
return ($head, $mode, $deletion);
|
||||
}
|
||||
|
||||
sub hunk_splittable {
|
||||
@@ -1206,7 +1209,7 @@ sub patch_update_file {
|
||||
my ($ix, $num);
|
||||
my $path = shift;
|
||||
my ($head, @hunk) = parse_diff($path);
|
||||
($head, my $mode) = parse_diff_header($head);
|
||||
($head, my $mode, my $deletion) = parse_diff_header($head);
|
||||
for (@{$head->{DISPLAY}}) {
|
||||
print;
|
||||
}
|
||||
@@ -1214,6 +1217,9 @@ sub patch_update_file {
|
||||
if (@{$mode->{TEXT}}) {
|
||||
unshift @hunk, $mode;
|
||||
}
|
||||
if (@{$deletion->{TEXT}} && !@hunk) {
|
||||
@hunk = ($deletion);
|
||||
}
|
||||
|
||||
$num = scalar @hunk;
|
||||
$ix = 0;
|
||||
@@ -1267,7 +1273,9 @@ sub patch_update_file {
|
||||
print;
|
||||
}
|
||||
print colored $prompt_color, $patch_mode_flavour{VERB},
|
||||
($hunk[$ix]{TYPE} eq 'mode' ? ' mode change' : ' this hunk'),
|
||||
($hunk[$ix]{TYPE} eq 'mode' ? ' mode change' :
|
||||
$hunk[$ix]{TYPE} eq 'deletion' ? ' deletion' :
|
||||
' this hunk'),
|
||||
$patch_mode_flavour{TARGET},
|
||||
" [y,n,q,a,d,/$other,?]? ";
|
||||
my $line = prompt_single_character;
|
||||
|
||||
@@ -81,7 +81,7 @@ do
|
||||
# tree as the intermediate result of the merge.
|
||||
# We still need to count this as part of the parent set.
|
||||
|
||||
echo "Fast forwarding to: $SHA1"
|
||||
echo "Fast-forwarding to: $SHA1"
|
||||
git read-tree -u -m $head $SHA1 || exit
|
||||
MRC=$SHA1 MRT=$(git write-tree)
|
||||
continue
|
||||
|
||||
@@ -46,7 +46,7 @@ check_unchanged () {
|
||||
valid_tool () {
|
||||
case "$1" in
|
||||
kdiff3 | tkdiff | xxdiff | meld | opendiff | \
|
||||
emerge | vimdiff | gvimdiff | ecmerge | diffuse | araxis)
|
||||
emerge | vimdiff | gvimdiff | ecmerge | diffuse | araxis | p4merge)
|
||||
;; # happy
|
||||
tortoisemerge)
|
||||
if ! merge_mode; then
|
||||
@@ -130,6 +130,19 @@ run_merge_tool () {
|
||||
"$merge_tool_path" "$LOCAL" "$REMOTE"
|
||||
fi
|
||||
;;
|
||||
p4merge)
|
||||
if merge_mode; then
|
||||
touch "$BACKUP"
|
||||
if $base_present; then
|
||||
"$merge_tool_path" "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
|
||||
else
|
||||
"$merge_tool_path" "$LOCAL" "$LOCAL" "$REMOTE" "$MERGED"
|
||||
fi
|
||||
check_unchanged
|
||||
else
|
||||
"$merge_tool_path" "$LOCAL" "$REMOTE"
|
||||
fi
|
||||
;;
|
||||
meld)
|
||||
if merge_mode; then
|
||||
touch "$BACKUP"
|
||||
@@ -323,7 +336,7 @@ guess_merge_tool () {
|
||||
else
|
||||
tools="opendiff kdiff3 tkdiff xxdiff meld $tools"
|
||||
fi
|
||||
tools="$tools gvimdiff diffuse ecmerge araxis"
|
||||
tools="$tools gvimdiff diffuse ecmerge p4merge araxis"
|
||||
fi
|
||||
if echo "${VISUAL:-$EDITOR}" | grep emacs > /dev/null 2>&1; then
|
||||
# $EDITOR is emacs so add emerge as a candidate
|
||||
|
||||
@@ -16,7 +16,8 @@ cd_to_toplevel
|
||||
test -z "$(git ls-files -u)" ||
|
||||
die "You are in the middle of a conflicted merge."
|
||||
|
||||
strategy_args= diffstat= no_commit= squash= no_ff= log_arg= verbosity=
|
||||
strategy_args= diffstat= no_commit= squash= no_ff= ff_only=
|
||||
log_arg= verbosity=
|
||||
curr_branch=$(git symbolic-ref -q HEAD)
|
||||
curr_branch_short=$(echo "$curr_branch" | sed "s|refs/heads/||")
|
||||
rebase=$(git config --bool branch.$curr_branch_short.rebase)
|
||||
@@ -45,6 +46,8 @@ do
|
||||
no_ff=--ff ;;
|
||||
--no-ff)
|
||||
no_ff=--no-ff ;;
|
||||
--ff-only)
|
||||
ff_only=--ff-only ;;
|
||||
-s=*|--s=*|--st=*|--str=*|--stra=*|--strat=*|--strate=*|\
|
||||
--strateg=*|--strategy=*|\
|
||||
-s|--s|--st|--str|--stra|--strat|--strate|--strateg|--strategy)
|
||||
@@ -171,7 +174,7 @@ then
|
||||
# First update the working tree to match $curr_head.
|
||||
|
||||
echo >&2 "Warning: fetch updated the current branch head."
|
||||
echo >&2 "Warning: fast forwarding your working tree from"
|
||||
echo >&2 "Warning: fast-forwarding your working tree from"
|
||||
echo >&2 "Warning: commit $orig_head."
|
||||
git update-index -q --refresh
|
||||
git read-tree -u -m "$orig_head" "$curr_head" ||
|
||||
@@ -215,5 +218,5 @@ merge_name=$(git fmt-merge-msg $log_arg <"$GIT_DIR/FETCH_HEAD") || exit
|
||||
test true = "$rebase" &&
|
||||
exec git-rebase $diffstat $strategy_args --onto $merge_head \
|
||||
${oldremoteref:-$merge_head}
|
||||
exec git-merge $diffstat $no_commit $squash $no_ff $log_arg $strategy_args \
|
||||
exec git-merge $diffstat $no_commit $squash $no_ff $ff_only $log_arg $strategy_args \
|
||||
"$merge_name" HEAD $merge_head $verbosity
|
||||
|
||||
@@ -168,7 +168,7 @@ pick_one () {
|
||||
output git reset --hard $sha1
|
||||
test "a$1" = a-n && output git reset --soft $current_sha1
|
||||
sha1=$(git rev-parse --short $sha1)
|
||||
output warn Fast forward to $sha1
|
||||
output warn Fast-forward to $sha1
|
||||
else
|
||||
output git cherry-pick "$@"
|
||||
fi
|
||||
@@ -248,9 +248,9 @@ pick_one_preserving_merges () {
|
||||
done
|
||||
case $fast_forward in
|
||||
t)
|
||||
output warn "Fast forward to $sha1"
|
||||
output warn "Fast-forward to $sha1"
|
||||
output git reset --hard $sha1 ||
|
||||
die "Cannot fast forward to $sha1"
|
||||
die "Cannot fast-forward to $sha1"
|
||||
;;
|
||||
f)
|
||||
first_parent=$(expr "$new_parents" : ' \([^ ]*\)')
|
||||
|
||||
@@ -496,7 +496,7 @@ then
|
||||
fi
|
||||
|
||||
# If the $onto is a proper descendant of the tip of the branch, then
|
||||
# we just fast forwarded.
|
||||
# we just fast-forwarded.
|
||||
if test "$mb" = "$branch"
|
||||
then
|
||||
say "Fast-forwarded $branch_name to $onto_name."
|
||||
|
||||
@@ -5127,7 +5127,8 @@ sub git_blob {
|
||||
chomp $line;
|
||||
$nr++;
|
||||
$line = untabify($line);
|
||||
printf "<div class=\"pre\"><a id=\"l%i\" href=\"#l%i\" class=\"linenr\">%4i</a> %s</div>\n",
|
||||
printf "<div class=\"pre\"><a id=\"l%i\" href=\"" . href(-replay => 1)
|
||||
. "#l%i\" class=\"linenr\">%4i</a> %s</div>\n",
|
||||
$nr, $nr, $nr, esc_html($line, -nbsp=>1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,8 +272,12 @@ static int ssl_socket_connect(struct imap_socket *sock, int use_tls_only, int ve
|
||||
#ifdef NO_OPENSSL
|
||||
fprintf(stderr, "SSL requested but SSL support not compiled in\n");
|
||||
return -1;
|
||||
#else
|
||||
#if (OPENSSL_VERSION_NUMBER >= 0x10000000L)
|
||||
const SSL_METHOD *meth;
|
||||
#else
|
||||
SSL_METHOD *meth;
|
||||
#endif
|
||||
SSL_CTX *ctx;
|
||||
int ret;
|
||||
|
||||
|
||||
57
pretty.c
57
pretty.c
@@ -446,6 +446,7 @@ struct format_commit_context {
|
||||
const struct pretty_print_context *pretty_ctx;
|
||||
unsigned commit_header_parsed:1;
|
||||
unsigned commit_message_parsed:1;
|
||||
size_t width, indent1, indent2;
|
||||
|
||||
/* These offsets are relative to the start of the commit message. */
|
||||
struct chunk author;
|
||||
@@ -459,6 +460,7 @@ struct format_commit_context {
|
||||
struct chunk abbrev_commit_hash;
|
||||
struct chunk abbrev_tree_hash;
|
||||
struct chunk abbrev_parent_hashes;
|
||||
size_t wrap_start;
|
||||
};
|
||||
|
||||
static int add_again(struct strbuf *sb, struct chunk *chunk)
|
||||
@@ -596,6 +598,35 @@ static void format_decoration(struct strbuf *sb, const struct commit *commit)
|
||||
strbuf_addch(sb, ')');
|
||||
}
|
||||
|
||||
static void strbuf_wrap(struct strbuf *sb, size_t pos,
|
||||
size_t width, size_t indent1, size_t indent2)
|
||||
{
|
||||
struct strbuf tmp = STRBUF_INIT;
|
||||
|
||||
if (pos)
|
||||
strbuf_add(&tmp, sb->buf, pos);
|
||||
strbuf_add_wrapped_text(&tmp, sb->buf + pos,
|
||||
(int) indent1, (int) indent2, (int) width);
|
||||
strbuf_swap(&tmp, sb);
|
||||
strbuf_release(&tmp);
|
||||
}
|
||||
|
||||
static void rewrap_message_tail(struct strbuf *sb,
|
||||
struct format_commit_context *c,
|
||||
size_t new_width, size_t new_indent1,
|
||||
size_t new_indent2)
|
||||
{
|
||||
if (c->width == new_width && c->indent1 == new_indent1 &&
|
||||
c->indent2 == new_indent2)
|
||||
return;
|
||||
if (c->wrap_start < sb->len)
|
||||
strbuf_wrap(sb, c->wrap_start, c->width, c->indent1, c->indent2);
|
||||
c->wrap_start = sb->len;
|
||||
c->width = new_width;
|
||||
c->indent1 = new_indent1;
|
||||
c->indent2 = new_indent2;
|
||||
}
|
||||
|
||||
static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
|
||||
void *context)
|
||||
{
|
||||
@@ -646,6 +677,30 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
|
||||
return 3;
|
||||
} else
|
||||
return 0;
|
||||
case 'w':
|
||||
if (placeholder[1] == '(') {
|
||||
unsigned long width = 0, indent1 = 0, indent2 = 0;
|
||||
char *next;
|
||||
const char *start = placeholder + 2;
|
||||
const char *end = strchr(start, ')');
|
||||
if (!end)
|
||||
return 0;
|
||||
if (end > start) {
|
||||
width = strtoul(start, &next, 10);
|
||||
if (*next == ',') {
|
||||
indent1 = strtoul(next + 1, &next, 10);
|
||||
if (*next == ',') {
|
||||
indent2 = strtoul(next + 1,
|
||||
&next, 10);
|
||||
}
|
||||
}
|
||||
if (*next != ')')
|
||||
return 0;
|
||||
}
|
||||
rewrap_message_tail(sb, c, width, indent1, indent2);
|
||||
return end - placeholder + 1;
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* these depend on the commit */
|
||||
@@ -765,7 +820,9 @@ void format_commit_message(const struct commit *commit,
|
||||
memset(&context, 0, sizeof(context));
|
||||
context.commit = commit;
|
||||
context.pretty_ctx = pretty_ctx;
|
||||
context.wrap_start = sb->len;
|
||||
strbuf_expand(sb, format, format_commit_item, &context);
|
||||
rewrap_message_tail(sb, &context, 0, 0, 0);
|
||||
}
|
||||
|
||||
static void pp_header(enum cmit_fmt fmt,
|
||||
|
||||
19
revision.c
19
revision.c
@@ -994,7 +994,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
|
||||
if (!strcmp(arg, "--all") || !strcmp(arg, "--branches") ||
|
||||
!strcmp(arg, "--tags") || !strcmp(arg, "--remotes") ||
|
||||
!strcmp(arg, "--reflog") || !strcmp(arg, "--not") ||
|
||||
!strcmp(arg, "--no-walk") || !strcmp(arg, "--do-walk"))
|
||||
!strcmp(arg, "--no-walk") || !strcmp(arg, "--do-walk") ||
|
||||
!strcmp(arg, "--bisect"))
|
||||
{
|
||||
unkv[(*unkc)++] = arg;
|
||||
return 1;
|
||||
@@ -1218,6 +1219,16 @@ void parse_revision_opt(struct rev_info *revs, struct parse_opt_ctx_t *ctx,
|
||||
ctx->argc -= n;
|
||||
}
|
||||
|
||||
static int for_each_bad_bisect_ref(each_ref_fn fn, void *cb_data)
|
||||
{
|
||||
return for_each_ref_in("refs/bisect/bad", fn, cb_data);
|
||||
}
|
||||
|
||||
static int for_each_good_bisect_ref(each_ref_fn fn, void *cb_data)
|
||||
{
|
||||
return for_each_ref_in("refs/bisect/good", fn, cb_data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse revision information, filling in the "rev_info" structure,
|
||||
* and removing the used arguments from the argument list.
|
||||
@@ -1259,6 +1270,12 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
|
||||
handle_refs(revs, flags, for_each_branch_ref);
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--bisect")) {
|
||||
handle_refs(revs, flags, for_each_bad_bisect_ref);
|
||||
handle_refs(revs, flags ^ UNINTERESTING, for_each_good_bisect_ref);
|
||||
revs->bisect = 1;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--tags")) {
|
||||
handle_refs(revs, flags, for_each_tag_ref);
|
||||
continue;
|
||||
|
||||
@@ -63,6 +63,7 @@ struct rev_info {
|
||||
reverse:1,
|
||||
reverse_output_stage:1,
|
||||
cherry_pick:1,
|
||||
bisect:1,
|
||||
first_parent_only:1;
|
||||
|
||||
/* Diff flags */
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
test_description='Two way merge with read-tree -m $H $M
|
||||
|
||||
This test tries two-way merge (aka fast forward with carry forward).
|
||||
This test tries two-way merge (aka fast-forward with carry forward).
|
||||
|
||||
There is the head (called H) and another commit (called M), which is
|
||||
simply ahead of H. The index and the work tree contains a state that
|
||||
@@ -51,7 +51,7 @@ check_cache_at () {
|
||||
}
|
||||
|
||||
cat >bozbar-old <<\EOF
|
||||
This is a sample file used in two-way fast forward merge
|
||||
This is a sample file used in two-way fast-forward merge
|
||||
tests. Its second line ends with a magic word bozbar
|
||||
which will be modified by the merged head to gnusto.
|
||||
It has some extra lines so that external tools can
|
||||
@@ -300,7 +300,7 @@ test_expect_success \
|
||||
echo gnusto gnusto >bozbar &&
|
||||
if read_tree_twoway $treeH $treeM; then false; else :; fi'
|
||||
|
||||
# This fails with straight two-way fast forward.
|
||||
# This fails with straight two-way fast-forward.
|
||||
test_expect_success \
|
||||
'22 - local change cache updated.' \
|
||||
'rm -f .git/index &&
|
||||
|
||||
@@ -29,4 +29,12 @@ test_expect_success 'add file to gitignore' '
|
||||
'
|
||||
check_all_output
|
||||
|
||||
test_expect_success 'ls-files -i lists only tracked-but-ignored files' '
|
||||
echo content >other-file &&
|
||||
git add other-file &&
|
||||
echo file >expect &&
|
||||
git ls-files -i --exclude-standard >output &&
|
||||
test_cmp expect output
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -228,4 +228,21 @@ test_expect_success 'add first line works' '
|
||||
test_cmp expected diff
|
||||
'
|
||||
|
||||
cat >expected <<EOF
|
||||
diff --git a/empty b/empty
|
||||
deleted file mode 100644
|
||||
index e69de29..0000000
|
||||
EOF
|
||||
|
||||
test_expect_success 'deleting an empty file' '
|
||||
git reset --hard &&
|
||||
> empty &&
|
||||
git add empty &&
|
||||
git commit -m empty &&
|
||||
rm empty &&
|
||||
echo y | git add -p empty &&
|
||||
git diff --cached >diff &&
|
||||
test_cmp expected diff
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -455,6 +455,27 @@ test_expect_success 'format-patch respects -U' '
|
||||
|
||||
'
|
||||
|
||||
cat > expect << EOF
|
||||
|
||||
diff --git a/file b/file
|
||||
index 40f36c6..2dc5c23 100644
|
||||
--- a/file
|
||||
+++ b/file
|
||||
@@ -14,3 +14,19 @@ C
|
||||
D
|
||||
E
|
||||
F
|
||||
+5
|
||||
EOF
|
||||
|
||||
test_expect_success 'format-patch -p suppresses stat' '
|
||||
|
||||
git format-patch -p -2 &&
|
||||
sed -e "1,/^$/d" -e "/^+5/q" < 0001-This-is-an-excessively-long-subject-line-for-a-messa.patch > output &&
|
||||
test_cmp expect output
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'format-patch from a subdirectory (1)' '
|
||||
filename=$(
|
||||
rm -rf sub &&
|
||||
|
||||
@@ -63,6 +63,26 @@ test_expect_success 'word diff with runs of whitespace' '
|
||||
|
||||
'
|
||||
|
||||
cat > expect <<\EOF
|
||||
<WHITE>diff --git a/pre b/post<RESET>
|
||||
<WHITE>index 330b04f..5ed8eff 100644<RESET>
|
||||
<WHITE>--- a/pre<RESET>
|
||||
<WHITE>+++ b/post<RESET>
|
||||
<BROWN>@@ -1 +1 @@<RESET>
|
||||
<RED>h(4)<RESET><GREEN>h(4),hh[44]<RESET>
|
||||
<BROWN>@@ -3,0 +4,4 @@ a = b + c<RESET>
|
||||
|
||||
<GREEN>aa = a<RESET>
|
||||
|
||||
<GREEN>aeff = aeff * ( aaa )<RESET>
|
||||
EOF
|
||||
|
||||
test_expect_success 'word diff without context' '
|
||||
|
||||
word_diff --color-words --unified=0
|
||||
|
||||
'
|
||||
|
||||
cat > expect <<\EOF
|
||||
<WHITE>diff --git a/pre b/post<RESET>
|
||||
<WHITE>index 330b04f..5ed8eff 100644<RESET>
|
||||
|
||||
@@ -158,7 +158,7 @@ cat > test/expect << EOF
|
||||
another
|
||||
master
|
||||
Local refs configured for 'git push':
|
||||
ahead forces to master (fast forwardable)
|
||||
ahead forces to master (fast-forwardable)
|
||||
master pushes to another (up to date)
|
||||
EOF
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ test_expect_success setup '
|
||||
git commit -a -m next
|
||||
'
|
||||
|
||||
test_expect_success 'non fast forward fetch' '
|
||||
test_expect_success 'non-fast-forward fetch' '
|
||||
|
||||
test_must_fail git fetch . master:side
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='merge fast forward and up to date'
|
||||
test_description='merge fast-forward and up to date'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
|
||||
@@ -125,6 +125,20 @@ test_expect_success 'rename tag Q back to A' '
|
||||
test_expect_success 'pack tag refs' 'git pack-refs'
|
||||
check_describe A-* HEAD
|
||||
|
||||
check_describe "A-*[0-9a-f]" --dirty
|
||||
|
||||
test_expect_success 'set-up dirty work tree' '
|
||||
echo >>file
|
||||
'
|
||||
|
||||
check_describe "A-*[0-9a-f]-dirty" --dirty
|
||||
|
||||
check_describe "A-*[0-9a-f].mod" --dirty=.mod
|
||||
|
||||
test_expect_success 'describe --dirty HEAD' '
|
||||
test_must_fail git describe --dirty HEAD
|
||||
'
|
||||
|
||||
test_expect_success 'set-up matching pattern tests' '
|
||||
git tag -a -m test-annotated test-annotated &&
|
||||
echo >>file &&
|
||||
|
||||
@@ -258,4 +258,13 @@ test_expect_success 'Hand committing of a redundant merge removes dups' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'A single-liner subject with a token plus colon is not a footer' '
|
||||
|
||||
git reset --hard &&
|
||||
git commit -s -m "hello: kitty" --allow-empty &&
|
||||
git cat-file commit HEAD | sed -e "1,/^$/d" >actual &&
|
||||
test $(wc -l <actual) = 3
|
||||
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -243,6 +243,16 @@ test_expect_success 'merge c0 with c1' '
|
||||
|
||||
test_debug 'gitk --all'
|
||||
|
||||
test_expect_success 'merge c0 with c1 with --ff-only' '
|
||||
git reset --hard c0 &&
|
||||
git merge --ff-only c1 &&
|
||||
git merge --ff-only HEAD c0 c1 &&
|
||||
verify_merge file result.1 &&
|
||||
verify_head "$c1"
|
||||
'
|
||||
|
||||
test_debug 'gitk --all'
|
||||
|
||||
test_expect_success 'merge c1 with c2' '
|
||||
git reset --hard c1 &&
|
||||
test_tick &&
|
||||
@@ -263,6 +273,14 @@ test_expect_success 'merge c1 with c2 and c3' '
|
||||
|
||||
test_debug 'gitk --all'
|
||||
|
||||
test_expect_success 'failing merges with --ff-only' '
|
||||
git reset --hard c1 &&
|
||||
test_tick &&
|
||||
test_must_fail git merge --ff-only c2 &&
|
||||
test_must_fail git merge --ff-only c3 &&
|
||||
test_must_fail git merge --ff-only c2 c3
|
||||
'
|
||||
|
||||
test_expect_success 'merge c0 with c1 (no-commit)' '
|
||||
git reset --hard c0 &&
|
||||
git merge --no-commit c1 &&
|
||||
@@ -303,6 +321,17 @@ test_expect_success 'merge c0 with c1 (squash)' '
|
||||
|
||||
test_debug 'gitk --all'
|
||||
|
||||
test_expect_success 'merge c0 with c1 (squash, ff-only)' '
|
||||
git reset --hard c0 &&
|
||||
git merge --squash --ff-only c1 &&
|
||||
verify_merge file result.1 &&
|
||||
verify_head $c0 &&
|
||||
verify_no_mergehead &&
|
||||
verify_diff squash.1 .git/SQUASH_MSG "[OOPS] bad squash message"
|
||||
'
|
||||
|
||||
test_debug 'gitk --all'
|
||||
|
||||
test_expect_success 'merge c1 with c2 (squash)' '
|
||||
git reset --hard c1 &&
|
||||
git merge --squash c2 &&
|
||||
@@ -314,6 +343,13 @@ test_expect_success 'merge c1 with c2 (squash)' '
|
||||
|
||||
test_debug 'gitk --all'
|
||||
|
||||
test_expect_success 'unsuccesful merge of c1 with c2 (squash, ff-only)' '
|
||||
git reset --hard c1 &&
|
||||
test_must_fail git merge --squash --ff-only c2
|
||||
'
|
||||
|
||||
test_debug 'gitk --all'
|
||||
|
||||
test_expect_success 'merge c1 with c2 and c3 (squash)' '
|
||||
git reset --hard c1 &&
|
||||
git merge --squash c2 c3 &&
|
||||
@@ -432,6 +468,11 @@ test_expect_success 'combining --squash and --no-ff is refused' '
|
||||
test_must_fail git merge --no-ff --squash c1
|
||||
'
|
||||
|
||||
test_expect_success 'combining --ff-only and --no-ff is refused' '
|
||||
test_must_fail git merge --ff-only --no-ff c1 &&
|
||||
test_must_fail git merge --no-ff --ff-only c1
|
||||
'
|
||||
|
||||
test_expect_success 'merge c0 with c1 (ff overrides no-ff)' '
|
||||
git reset --hard c0 &&
|
||||
git config branch.master.mergeoptions "--no-ff" &&
|
||||
|
||||
@@ -7,6 +7,14 @@
|
||||
#
|
||||
# To enable this hook, rename this file to "pre-commit".
|
||||
|
||||
if git-rev-parse --verify HEAD >/dev/null 2>&1
|
||||
then
|
||||
against=HEAD
|
||||
else
|
||||
# Initial commit: diff against an empty tree object
|
||||
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
|
||||
fi
|
||||
|
||||
# If you want to allow non-ascii filenames set this variable to true.
|
||||
allownonascii=$(git config hooks.allownonascii)
|
||||
|
||||
@@ -17,7 +25,7 @@ if [ "$allownonascii" != "true" ] &&
|
||||
# Note that the use of brackets around a tr range is ok here, (it's
|
||||
# even required, for portability to Solaris 10's /usr/bin/tr), since
|
||||
# the square bracket bytes happen to fall in the designated range.
|
||||
test "$(git diff --cached --name-only --diff-filter=A -z |
|
||||
test "$(git diff --cached --name-only --diff-filter=A -z $against |
|
||||
LC_ALL=C tr -d '[ -~]\0')"
|
||||
then
|
||||
echo "Error: Attempt to add a non-ascii file name."
|
||||
@@ -35,12 +43,4 @@ then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if git-rev-parse --verify HEAD >/dev/null 2>&1
|
||||
then
|
||||
against=HEAD
|
||||
else
|
||||
# Initial commit: diff against an empty tree object
|
||||
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
|
||||
fi
|
||||
|
||||
exec git diff-index --check --cached $against --
|
||||
|
||||
@@ -668,7 +668,7 @@ static int print_one_push_status(struct ref *ref, const char *dest, int count, i
|
||||
break;
|
||||
case REF_STATUS_REJECT_NONFASTFORWARD:
|
||||
print_ref_status('!', "[rejected]", ref, ref->peer_ref,
|
||||
"non-fast forward", porcelain);
|
||||
"non-fast-forward", porcelain);
|
||||
break;
|
||||
case REF_STATUS_REMOTE_REJECT:
|
||||
print_ref_status('!', "[remote rejected]", ref,
|
||||
|
||||
@@ -895,7 +895,7 @@ int threeway_merge(struct cache_entry **stages, struct unpack_trees_options *o)
|
||||
* Two-way merge.
|
||||
*
|
||||
* The rule is to "carry forward" what is in the index without losing
|
||||
* information across a "fast forward", favoring a successful merge
|
||||
* information across a "fast-forward", favoring a successful merge
|
||||
* over a merge failure when it makes sense. For details of the
|
||||
* "carry forward" rule, please see <Documentation/git-read-tree.txt>.
|
||||
*
|
||||
|
||||
60
utf8.c
60
utf8.c
@@ -1,4 +1,5 @@
|
||||
#include "git-compat-util.h"
|
||||
#include "strbuf.h"
|
||||
#include "utf8.h"
|
||||
|
||||
/* This code is originally from http://www.cl.cam.ac.uk/~mgk25/ucs/ */
|
||||
@@ -279,14 +280,22 @@ int is_utf8(const char *text)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void print_spaces(int count)
|
||||
static inline void strbuf_write(struct strbuf *sb, const char *buf, int len)
|
||||
{
|
||||
if (sb)
|
||||
strbuf_insert(sb, sb->len, buf, len);
|
||||
else
|
||||
fwrite(buf, len, 1, stdout);
|
||||
}
|
||||
|
||||
static void print_spaces(struct strbuf *buf, int count)
|
||||
{
|
||||
static const char s[] = " ";
|
||||
while (count >= sizeof(s)) {
|
||||
fwrite(s, sizeof(s) - 1, 1, stdout);
|
||||
strbuf_write(buf, s, sizeof(s) - 1);
|
||||
count -= sizeof(s) - 1;
|
||||
}
|
||||
fwrite(s, count, 1, stdout);
|
||||
strbuf_write(buf, s, count);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -295,11 +304,25 @@ static void print_spaces(int count)
|
||||
* If indent is negative, assume that already -indent columns have been
|
||||
* consumed (and no extra indent is necessary for the first line).
|
||||
*/
|
||||
int print_wrapped_text(const char *text, int indent, int indent2, int width)
|
||||
int strbuf_add_wrapped_text(struct strbuf *buf,
|
||||
const char *text, int indent, int indent2, int width)
|
||||
{
|
||||
int w = indent, assume_utf8 = is_utf8(text);
|
||||
const char *bol = text, *space = NULL;
|
||||
|
||||
if (width <= 0) {
|
||||
/* just indent */
|
||||
while (*text) {
|
||||
const char *eol = strchrnul(text, '\n');
|
||||
if (*eol == '\n')
|
||||
eol++;
|
||||
print_spaces(buf, indent);
|
||||
strbuf_write(buf, text, eol-text);
|
||||
text = eol;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (indent < 0) {
|
||||
w = -indent;
|
||||
space = text;
|
||||
@@ -310,21 +333,35 @@ int print_wrapped_text(const char *text, int indent, int indent2, int width)
|
||||
if (!c || isspace(c)) {
|
||||
if (w < width || !space) {
|
||||
const char *start = bol;
|
||||
if (!c && text == start)
|
||||
return w;
|
||||
if (space)
|
||||
start = space;
|
||||
else
|
||||
print_spaces(indent);
|
||||
fwrite(start, text - start, 1, stdout);
|
||||
print_spaces(buf, indent);
|
||||
strbuf_write(buf, start, text - start);
|
||||
if (!c)
|
||||
return w;
|
||||
else if (c == '\t')
|
||||
w |= 0x07;
|
||||
space = text;
|
||||
if (c == '\t')
|
||||
w |= 0x07;
|
||||
else if (c == '\n') {
|
||||
space++;
|
||||
if (*space == '\n') {
|
||||
strbuf_write(buf, "\n", 1);
|
||||
goto new_line;
|
||||
}
|
||||
else if (!isalnum(*space))
|
||||
goto new_line;
|
||||
else
|
||||
strbuf_write(buf, " ", 1);
|
||||
}
|
||||
w++;
|
||||
text++;
|
||||
}
|
||||
else {
|
||||
putchar('\n');
|
||||
new_line:
|
||||
strbuf_write(buf, "\n", 1);
|
||||
text = bol = space + isspace(*space);
|
||||
space = NULL;
|
||||
w = indent = indent2;
|
||||
@@ -340,6 +377,11 @@ int print_wrapped_text(const char *text, int indent, int indent2, int width)
|
||||
}
|
||||
}
|
||||
|
||||
int print_wrapped_text(const char *text, int indent, int indent2, int width)
|
||||
{
|
||||
return strbuf_add_wrapped_text(NULL, text, indent, indent2, width);
|
||||
}
|
||||
|
||||
int is_encoding_utf8(const char *name)
|
||||
{
|
||||
if (!name)
|
||||
|
||||
2
utf8.h
2
utf8.h
@@ -10,6 +10,8 @@ int is_utf8(const char *text);
|
||||
int is_encoding_utf8(const char *name);
|
||||
|
||||
int print_wrapped_text(const char *text, int indent, int indent2, int len);
|
||||
int strbuf_add_wrapped_text(struct strbuf *buf,
|
||||
const char *text, int indent, int indent2, int width);
|
||||
|
||||
#ifndef NO_ICONV
|
||||
char *reencode_string(const char *in, const char *out_encoding, const char *in_encoding);
|
||||
|
||||
Reference in New Issue
Block a user