mirror of
https://github.com/git/git.git
synced 2026-04-03 13:30:47 +02:00
Merge branch 'master' of git://repo.or.cz/alt-git
This commit is contained in:
@@ -103,6 +103,14 @@ ifdef DOCBOOK_SUPPRESS_SP
|
||||
XMLTO_EXTRA += -m manpage-suppress-sp.xsl
|
||||
endif
|
||||
|
||||
# If your target system uses GNU groff, it may try to render
|
||||
# apostrophes as a "pretty" apostrophe using unicode. This breaks
|
||||
# cut&paste, so you should set GNU_ROFF to force them to be ASCII
|
||||
# apostrophes. Unfortunately does not work with non-GNU roff.
|
||||
ifdef GNU_ROFF
|
||||
XMLTO_EXTRA += -m manpage-quote-apos.xsl
|
||||
endif
|
||||
|
||||
SHELL_PATH ?= $(SHELL)
|
||||
# Shell quote;
|
||||
SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
|
||||
|
||||
@@ -87,6 +87,13 @@ endif::git-format-patch[]
|
||||
Show only names and status of changed files. See the description
|
||||
of the `--diff-filter` option on what the status letters mean.
|
||||
|
||||
--submodule[=<format>]::
|
||||
Chose the output format for submodule differences. <format> can be one of
|
||||
'short' and 'log'. 'short' just shows pairs of commit names, this format
|
||||
is used when this option is not given. 'log' is the default value for this
|
||||
option and lists the commits in that commit range like the 'summary'
|
||||
option of linkgit:git-submodule[1] does.
|
||||
|
||||
--color::
|
||||
Show colored diff.
|
||||
|
||||
|
||||
@@ -1,25 +1,13 @@
|
||||
ifndef::git-pull[]
|
||||
-q::
|
||||
--quiet::
|
||||
Pass --quiet to git-fetch-pack and silence any other internally
|
||||
used git commands.
|
||||
|
||||
-v::
|
||||
--verbose::
|
||||
Be verbose.
|
||||
endif::git-pull[]
|
||||
|
||||
-a::
|
||||
--append::
|
||||
Append ref names and object names of fetched refs to the
|
||||
existing contents of `.git/FETCH_HEAD`. Without this
|
||||
option old data in `.git/FETCH_HEAD` will be overwritten.
|
||||
|
||||
--upload-pack <upload-pack>::
|
||||
When given, and the repository to fetch from is handled
|
||||
by 'git-fetch-pack', '--exec=<upload-pack>' is passed to
|
||||
the command to specify non-default path for the command
|
||||
run on the other end.
|
||||
--depth=<depth>::
|
||||
Deepen the history of a 'shallow' repository created by
|
||||
`git clone` with `--depth=<depth>` option (see linkgit:git-clone[1])
|
||||
by the specified number of commits.
|
||||
|
||||
-f::
|
||||
--force::
|
||||
@@ -29,6 +17,10 @@ endif::git-pull[]
|
||||
fetches is a descendant of `<lbranch>`. This option
|
||||
overrides that check.
|
||||
|
||||
-k::
|
||||
--keep::
|
||||
Keep downloaded pack.
|
||||
|
||||
ifdef::git-pull[]
|
||||
--no-tags::
|
||||
endif::git-pull[]
|
||||
@@ -49,10 +41,6 @@ endif::git-pull[]
|
||||
flag lets all tags and their associated objects be
|
||||
downloaded.
|
||||
|
||||
-k::
|
||||
--keep::
|
||||
Keep downloaded pack.
|
||||
|
||||
-u::
|
||||
--update-head-ok::
|
||||
By default 'git-fetch' refuses to update the head which
|
||||
@@ -62,7 +50,19 @@ endif::git-pull[]
|
||||
implementing your own Porcelain you are not supposed to
|
||||
use it.
|
||||
|
||||
--depth=<depth>::
|
||||
Deepen the history of a 'shallow' repository created by
|
||||
`git clone` with `--depth=<depth>` option (see linkgit:git-clone[1])
|
||||
by the specified number of commits.
|
||||
--upload-pack <upload-pack>::
|
||||
When given, and the repository to fetch from is handled
|
||||
by 'git-fetch-pack', '--exec=<upload-pack>' is passed to
|
||||
the command to specify non-default path for the command
|
||||
run on the other end.
|
||||
|
||||
ifndef::git-pull[]
|
||||
-q::
|
||||
--quiet::
|
||||
Pass --quiet to git-fetch-pack and silence any other internally
|
||||
used git commands.
|
||||
|
||||
-v::
|
||||
--verbose::
|
||||
Be verbose.
|
||||
endif::git-pull[]
|
||||
|
||||
@@ -20,7 +20,7 @@ on the subcommand:
|
||||
git bisect bad [<rev>]
|
||||
git bisect good [<rev>...]
|
||||
git bisect skip [(<rev>|<range>)...]
|
||||
git bisect reset [<branch>]
|
||||
git bisect reset [<commit>]
|
||||
git bisect visualize
|
||||
git bisect replay <logfile>
|
||||
git bisect log
|
||||
@@ -81,16 +81,27 @@ will have been left with the first bad kernel revision in "refs/bisect/bad".
|
||||
Bisect reset
|
||||
~~~~~~~~~~~~
|
||||
|
||||
To return to the original head after a bisect session, issue the
|
||||
following command:
|
||||
After a bisect session, to clean up the bisection state and return to
|
||||
the original HEAD, issue the following command:
|
||||
|
||||
------------------------------------------------
|
||||
$ git bisect reset
|
||||
------------------------------------------------
|
||||
|
||||
This resets the tree to the original branch instead of being on the
|
||||
bisection commit ("git bisect start" will also do that, as it resets
|
||||
the bisection state).
|
||||
By default, this will return your tree to the commit that was checked
|
||||
out before `git bisect start`. (A new `git bisect start` will also do
|
||||
that, as it cleans up the old bisection state.)
|
||||
|
||||
With an optional argument, you can return to a different commit
|
||||
instead:
|
||||
|
||||
------------------------------------------------
|
||||
$ git bisect reset <commit>
|
||||
------------------------------------------------
|
||||
|
||||
For example, `git bisect reset HEAD` will leave you on the current
|
||||
bisection commit and avoid switching commits at all, while `git bisect
|
||||
reset bisect/bad` will check out the first bad revision.
|
||||
|
||||
Bisect visualize
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -9,6 +9,7 @@ SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git check-ref-format' <refname>
|
||||
'git check-ref-format' --print <refname>
|
||||
'git check-ref-format' --branch <branchname-shorthand>
|
||||
|
||||
DESCRIPTION
|
||||
@@ -63,19 +64,31 @@ reference name expressions (see linkgit:git-rev-parse[1]):
|
||||
|
||||
. at-open-brace `@{` is used as a notation to access a reflog entry.
|
||||
|
||||
With the `--print` option, if 'refname' is acceptable, it prints the
|
||||
canonicalized name of a hypothetical reference with that name. That is,
|
||||
it prints 'refname' with any extra `/` characters removed.
|
||||
|
||||
With the `--branch` option, it expands the ``previous branch syntax''
|
||||
`@{-n}`. For example, `@{-1}` is a way to refer the last branch you
|
||||
were on. This option should be used by porcelains to accept this
|
||||
syntax anywhere a branch name is expected, so they can act as if you
|
||||
typed the branch name.
|
||||
|
||||
EXAMPLE
|
||||
-------
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
git check-ref-format --branch @{-1}::
|
||||
|
||||
Print the name of the previous branch.
|
||||
* Print the name of the previous branch:
|
||||
+
|
||||
------------
|
||||
$ git check-ref-format --branch @{-1}
|
||||
------------
|
||||
|
||||
* Determine the reference name to use for a new branch:
|
||||
+
|
||||
------------
|
||||
$ ref=$(git check-ref-format --print "refs/heads/$newbranch") ||
|
||||
die "we do not like '$newbranch' as a branch name."
|
||||
------------
|
||||
|
||||
GIT
|
||||
---
|
||||
|
||||
@@ -44,7 +44,9 @@ OPTIONS
|
||||
|
||||
--abbrev=<n>::
|
||||
Instead of using the default 7 hexadecimal digits as the
|
||||
abbreviated object name, use <n> digits.
|
||||
abbreviated object name, use <n> digits, or as many digits
|
||||
as needed to form a unique object name. An <n> of 0
|
||||
will suppress long format, only showing the closest tag.
|
||||
|
||||
--candidates=<n>::
|
||||
Instead of considering only the 10 most recent tags as
|
||||
@@ -68,8 +70,8 @@ OPTIONS
|
||||
This is useful when you want to see parts of the commit object name
|
||||
in "describe" output, even when the commit in question happens to be
|
||||
a tagged version. Instead of just emitting the tag name, it will
|
||||
describe such a commit as v1.2-0-deadbeef (0th commit since tag v1.2
|
||||
that points at object deadbeef....).
|
||||
describe such a commit as v1.2-0-gdeadbee (0th commit since tag v1.2
|
||||
that points at object deadbee....).
|
||||
|
||||
--match <pattern>::
|
||||
Only consider tags matching the given pattern (can be used to avoid
|
||||
@@ -108,7 +110,7 @@ the output shows the reference path as well:
|
||||
[torvalds@g5 git]$ git describe --all --abbrev=4 v1.0.5^2
|
||||
tags/v1.0.0-21-g975b
|
||||
|
||||
[torvalds@g5 git]$ git describe --all HEAD^
|
||||
[torvalds@g5 git]$ git describe --all --abbrev=4 HEAD^
|
||||
heads/lt/describe-7-g975b
|
||||
|
||||
With --abbrev set to 0, the command can be used to find the
|
||||
@@ -117,6 +119,13 @@ closest tagname without any suffix:
|
||||
[torvalds@g5 git]$ git describe --abbrev=0 v1.0.5^2
|
||||
tags/v1.0.0
|
||||
|
||||
Note that the suffix you get if you type these commands today may be
|
||||
longer than what Linus saw above when he ran these commands, as your
|
||||
git repository may have new commits whose object names begin with
|
||||
975b that did not exist back then, and "-g975b" suffix alone may not
|
||||
be sufficient to disambiguate these commits.
|
||||
|
||||
|
||||
SEARCH STRATEGY
|
||||
---------------
|
||||
|
||||
|
||||
@@ -37,6 +37,35 @@ include::pull-fetch-param.txt[]
|
||||
|
||||
include::urls-remotes.txt[]
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
* Update the remote-tracking branches:
|
||||
+
|
||||
------------------------------------------------
|
||||
$ git fetch origin
|
||||
------------------------------------------------
|
||||
+
|
||||
The above command copies all branches from the remote refs/heads/
|
||||
namespace and stores them to the local refs/remotes/origin/ namespace,
|
||||
unless the branch.<name>.fetch option is used to specify a non-default
|
||||
refspec.
|
||||
|
||||
* Using refspecs explicitly:
|
||||
+
|
||||
------------------------------------------------
|
||||
$ git fetch origin +pu:pu maint:tmp
|
||||
------------------------------------------------
|
||||
+
|
||||
This updates (or creates, as necessary) branches `pu` and `tmp` in
|
||||
the local repository by fetching from the branches (respectively)
|
||||
`pu` and `maint` from the remote repository.
|
||||
+
|
||||
The `pu` branch will be updated even if it is does not fast-forward,
|
||||
because it is prefixed with a plus sign; `tmp` will not be.
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
linkgit:git-pull[1]
|
||||
|
||||
@@ -212,6 +212,39 @@ You can work through the conflict with a number of tools:
|
||||
common ancestor, 'git show :2:filename' shows the HEAD
|
||||
version and 'git show :3:filename' shows the remote version.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
* Merge branches `fixes` and `enhancements` on top of
|
||||
the current branch, making an octopus merge:
|
||||
+
|
||||
------------------------------------------------
|
||||
$ git merge fixes enhancements
|
||||
------------------------------------------------
|
||||
|
||||
* Merge branch `obsolete` into the current branch, using `ours`
|
||||
merge strategy:
|
||||
+
|
||||
------------------------------------------------
|
||||
$ git merge -s ours obsolete
|
||||
------------------------------------------------
|
||||
|
||||
* Merge branch `maint` into the current branch, but do not make
|
||||
a new commit automatically:
|
||||
+
|
||||
------------------------------------------------
|
||||
$ git merge --no-commit maint
|
||||
------------------------------------------------
|
||||
+
|
||||
This can be used when you want to include further changes to the
|
||||
merge, or want to write your own merge commit message.
|
||||
+
|
||||
You should refrain from abusing this option to sneak substantial
|
||||
changes into a merge commit. Small fixups like bumping
|
||||
release/version name would be acceptable.
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
linkgit:git-fmt-merge-msg[1], linkgit:git-pull[1],
|
||||
|
||||
@@ -26,6 +26,10 @@ Also note that options meant for 'git-pull' itself and underlying
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
|
||||
Options related to merging
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
include::merge-options.txt[]
|
||||
|
||||
:git-pull: 1
|
||||
@@ -47,6 +51,9 @@ unless you have read linkgit:git-rebase[1] carefully.
|
||||
--no-rebase::
|
||||
Override earlier --rebase.
|
||||
|
||||
Options related to fetching
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
include::fetch-options.txt[]
|
||||
|
||||
include::pull-fetch-param.txt[]
|
||||
@@ -131,54 +138,13 @@ $ git pull origin next
|
||||
------------------------------------------------
|
||||
+
|
||||
This leaves a copy of `next` temporarily in FETCH_HEAD, but
|
||||
does not update any remote-tracking branches.
|
||||
|
||||
* Bundle local branch `fixes` and `enhancements` on top of
|
||||
the current branch, making an Octopus merge:
|
||||
does not update any remote-tracking branches. Using remote-tracking
|
||||
branches, the same can be done by invoking fetch and merge:
|
||||
+
|
||||
------------------------------------------------
|
||||
$ git pull . fixes enhancements
|
||||
$ git fetch origin
|
||||
$ git merge origin/next
|
||||
------------------------------------------------
|
||||
+
|
||||
This `git pull .` syntax is equivalent to `git merge`.
|
||||
|
||||
* Merge local branch `obsolete` into the current branch, using `ours`
|
||||
merge strategy:
|
||||
+
|
||||
------------------------------------------------
|
||||
$ git pull -s ours . obsolete
|
||||
------------------------------------------------
|
||||
|
||||
* Merge local branch `maint` into the current branch, but do not make
|
||||
a commit automatically:
|
||||
+
|
||||
------------------------------------------------
|
||||
$ git pull --no-commit . maint
|
||||
------------------------------------------------
|
||||
+
|
||||
This can be used when you want to include further changes to the
|
||||
merge, or want to write your own merge commit message.
|
||||
+
|
||||
You should refrain from abusing this option to sneak substantial
|
||||
changes into a merge commit. Small fixups like bumping
|
||||
release/version name would be acceptable.
|
||||
|
||||
* Command line pull of multiple branches from one repository:
|
||||
+
|
||||
------------------------------------------------
|
||||
$ git checkout master
|
||||
$ git fetch origin +pu:pu maint:tmp
|
||||
$ git pull . tmp
|
||||
------------------------------------------------
|
||||
+
|
||||
This updates (or creates, as necessary) branches `pu` and `tmp` in
|
||||
the local repository by fetching from the branches (respectively)
|
||||
`pu` and `maint` from the remote repository.
|
||||
+
|
||||
The `pu` branch will be updated even if it is does not fast-forward;
|
||||
the others will not be.
|
||||
+
|
||||
The final command then merges the newly fetched `tmp` into master.
|
||||
|
||||
|
||||
If you tried a pull which resulted in a complex conflicts and
|
||||
|
||||
@@ -78,8 +78,7 @@ stash@{1}: On master: 9cc0589... Add git-stash
|
||||
----------------------------------------------------------------
|
||||
+
|
||||
The command takes options applicable to the 'git-log'
|
||||
command to control what is shown and how. If no options are set, the
|
||||
default is `-n 10`. See linkgit:git-log[1].
|
||||
command to control what is shown and how. See linkgit:git-log[1].
|
||||
|
||||
show [<stash>]::
|
||||
|
||||
|
||||
16
Documentation/manpage-quote-apos.xsl
Normal file
16
Documentation/manpage-quote-apos.xsl
Normal file
@@ -0,0 +1,16 @@
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0">
|
||||
|
||||
<!-- work around newer groff/man setups using a prettier apostrophe
|
||||
that unfortunately does not quote anything when cut&pasting
|
||||
examples to the shell -->
|
||||
<xsl:template name="escape.apostrophe">
|
||||
<xsl:param name="content"/>
|
||||
<xsl:call-template name="string.subst">
|
||||
<xsl:with-param name="string" select="$content"/>
|
||||
<xsl:with-param name="target">'</xsl:with-param>
|
||||
<xsl:with-param name="replacement">\(aq</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
@@ -1,43 +1,42 @@
|
||||
-q::
|
||||
--quiet::
|
||||
Operate quietly.
|
||||
--commit::
|
||||
--no-commit::
|
||||
Perform the merge and commit the result. This option can
|
||||
be used to override --no-commit.
|
||||
+
|
||||
With --no-commit perform the merge but pretend the merge
|
||||
failed and do not autocommit, to give the user a chance to
|
||||
inspect and further tweak the merge result before committing.
|
||||
|
||||
-v::
|
||||
--verbose::
|
||||
Be verbose.
|
||||
|
||||
--stat::
|
||||
Show a diffstat at the end of the merge. The diffstat is also
|
||||
controlled by the configuration option merge.stat.
|
||||
|
||||
-n::
|
||||
--no-stat::
|
||||
Do not show a diffstat at the end of the merge.
|
||||
|
||||
--summary::
|
||||
--no-summary::
|
||||
Synonyms to --stat and --no-stat; these are deprecated and will be
|
||||
removed in the future.
|
||||
--ff::
|
||||
--no-ff::
|
||||
Do not generate a merge commit if the merge resolved as
|
||||
a fast-forward, only update the branch pointer. This is
|
||||
the default behavior of git-merge.
|
||||
+
|
||||
With --no-ff Generate a merge commit even if the merge
|
||||
resolved as a fast-forward.
|
||||
|
||||
--log::
|
||||
--no-log::
|
||||
In addition to branch names, populate the log message with
|
||||
one-line descriptions from the actual commits that are being
|
||||
merged.
|
||||
+
|
||||
With --no-log do not list one-line descriptions from the
|
||||
actual commits being merged.
|
||||
|
||||
--no-log::
|
||||
Do not list one-line descriptions from the actual commits being
|
||||
merged.
|
||||
|
||||
--no-commit::
|
||||
Perform the merge but pretend the merge failed and do
|
||||
not autocommit, to give the user a chance to inspect and
|
||||
further tweak the merge result before committing.
|
||||
|
||||
--commit::
|
||||
Perform the merge and commit the result. This option can
|
||||
be used to override --no-commit.
|
||||
--stat::
|
||||
-n::
|
||||
--no-stat::
|
||||
Show a diffstat at the end of the merge. The diffstat is also
|
||||
controlled by the configuration option merge.stat.
|
||||
+
|
||||
With -n or --no-stat do not show a diffstat at the end of the
|
||||
merge.
|
||||
|
||||
--squash::
|
||||
--no-squash::
|
||||
Produce the working tree and index state as if a real
|
||||
merge happened (except for the merge information),
|
||||
but do not actually make a commit or
|
||||
@@ -46,19 +45,9 @@
|
||||
commit. This allows you to create a single commit on
|
||||
top of the current branch whose effect is the same as
|
||||
merging another branch (or more in case of an octopus).
|
||||
|
||||
--no-squash::
|
||||
Perform the merge and commit the result. This option can
|
||||
be used to override --squash.
|
||||
|
||||
--no-ff::
|
||||
Generate a merge commit even if the merge resolved as a
|
||||
fast-forward.
|
||||
|
||||
--ff::
|
||||
Do not generate a merge commit if the merge resolved as
|
||||
a fast-forward, only update the branch pointer. This is
|
||||
the default behavior of git-merge.
|
||||
+
|
||||
With --no-squash perform the merge and commit the result. This
|
||||
option can be used to override --squash.
|
||||
|
||||
-s <strategy>::
|
||||
--strategy=<strategy>::
|
||||
@@ -67,3 +56,16 @@
|
||||
If there is no `-s` option, a built-in list of strategies
|
||||
is used instead ('git-merge-recursive' when merging a single
|
||||
head, 'git-merge-octopus' otherwise).
|
||||
|
||||
--summary::
|
||||
--no-summary::
|
||||
Synonyms to --stat and --no-stat; these are deprecated and will be
|
||||
removed in the future.
|
||||
|
||||
-q::
|
||||
--quiet::
|
||||
Operate quietly.
|
||||
|
||||
-v::
|
||||
--verbose::
|
||||
Be verbose.
|
||||
|
||||
@@ -123,6 +123,9 @@ The placeholders are:
|
||||
- '%s': subject
|
||||
- '%f': sanitized subject line, suitable for a filename
|
||||
- '%b': body
|
||||
- '%gD': reflog selector, e.g., `refs/stash@\{1\}`
|
||||
- '%gd': shortened reflog selector, e.g., `stash@\{1\}`
|
||||
- '%gs': reflog subject
|
||||
- '%Cred': switch color to red
|
||||
- '%Cgreen': switch color to green
|
||||
- '%Cblue': switch color to blue
|
||||
@@ -132,6 +135,12 @@ The placeholders are:
|
||||
- '%n': newline
|
||||
- '%x00': print a byte from a hex code
|
||||
|
||||
NOTE: Some placeholders may depend on other options given to the
|
||||
revision traversal engine. For example, the `%g*` reflog options will
|
||||
insert an empty string unless we are traversing reflog entries (e.g., by
|
||||
`git log -g`). The `%d` placeholder will use the "short" decoration
|
||||
format if `--decorate` was not already provided on the command line.
|
||||
|
||||
* 'tformat:'
|
||||
+
|
||||
The 'tformat:' format works exactly like 'format:', except that it
|
||||
|
||||
9
Makefile
9
Makefile
@@ -159,6 +159,10 @@ all::
|
||||
# Define ASCIIDOC_NO_ROFF if your DocBook XSL escapes raw roff directives
|
||||
# (versions 1.72 and later and 1.68.1 and earlier).
|
||||
#
|
||||
# Define GNU_ROFF if your target system uses GNU groff. This forces
|
||||
# apostrophes to be ASCII so that cut&pasting examples to the shell
|
||||
# will work.
|
||||
#
|
||||
# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
|
||||
# MakeMaker (e.g. using ActiveState under Cygwin).
|
||||
#
|
||||
@@ -412,6 +416,7 @@ LIB_H += builtin.h
|
||||
LIB_H += cache.h
|
||||
LIB_H += cache-tree.h
|
||||
LIB_H += commit.h
|
||||
LIB_H += compat/bswap.h
|
||||
LIB_H += compat/cygwin.h
|
||||
LIB_H += compat/mingw.h
|
||||
LIB_H += csum-file.h
|
||||
@@ -452,6 +457,7 @@ LIB_H += sideband.h
|
||||
LIB_H += sigchain.h
|
||||
LIB_H += strbuf.h
|
||||
LIB_H += string-list.h
|
||||
LIB_H += submodule.h
|
||||
LIB_H += tag.h
|
||||
LIB_H += transport.h
|
||||
LIB_H += tree.h
|
||||
@@ -550,6 +556,7 @@ LIB_OBJS += sideband.o
|
||||
LIB_OBJS += sigchain.o
|
||||
LIB_OBJS += strbuf.o
|
||||
LIB_OBJS += string-list.o
|
||||
LIB_OBJS += submodule.o
|
||||
LIB_OBJS += symlinks.o
|
||||
LIB_OBJS += tag.o
|
||||
LIB_OBJS += trace.o
|
||||
@@ -1375,7 +1382,7 @@ SHELL = $(SHELL_PATH)
|
||||
|
||||
all:: shell_compatibility_test $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
|
||||
ifneq (,$X)
|
||||
$(QUIET_BUILT_IN)$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), test '$p' -ef '$p$X' || $(RM) '$p';)
|
||||
$(QUIET_BUILT_IN)$(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) git$X)), test -d '$p' -o '$p' -ef '$p$X' || $(RM) '$p';)
|
||||
endif
|
||||
|
||||
all::
|
||||
|
||||
@@ -31,6 +31,8 @@ static void format_subst(const struct commit *commit,
|
||||
{
|
||||
char *to_free = NULL;
|
||||
struct strbuf fmt = STRBUF_INIT;
|
||||
struct pretty_print_context ctx = {0};
|
||||
ctx.date_mode = DATE_NORMAL;
|
||||
|
||||
if (src == buf->buf)
|
||||
to_free = strbuf_detach(buf, NULL);
|
||||
@@ -48,7 +50,7 @@ static void format_subst(const struct commit *commit,
|
||||
strbuf_add(&fmt, b + 8, c - b - 8);
|
||||
|
||||
strbuf_add(buf, src, b - src);
|
||||
format_commit_message(commit, fmt.buf, buf, DATE_NORMAL);
|
||||
format_commit_message(commit, fmt.buf, buf, &ctx);
|
||||
len -= c + 1 - src;
|
||||
src = c + 1;
|
||||
}
|
||||
|
||||
@@ -387,8 +387,9 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
|
||||
|
||||
commit = item->commit;
|
||||
if (commit && !parse_commit(commit)) {
|
||||
struct pretty_print_context ctx = {0};
|
||||
pretty_print_commit(CMIT_FMT_ONELINE, commit,
|
||||
&subject, 0, NULL, NULL, 0, 0);
|
||||
&subject, &ctx);
|
||||
sub = subject.buf;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,28 @@
|
||||
#include "builtin.h"
|
||||
#include "strbuf.h"
|
||||
|
||||
/*
|
||||
* Replace each run of adjacent slashes in src with a single slash,
|
||||
* and write the result to dst.
|
||||
*
|
||||
* This function is similar to normalize_path_copy(), but stripped down
|
||||
* to meet check_ref_format's simpler needs.
|
||||
*/
|
||||
static void collapse_slashes(char *dst, const char *src)
|
||||
{
|
||||
char ch;
|
||||
char prev = '\0';
|
||||
|
||||
while ((ch = *src++) != '\0') {
|
||||
if (prev == '/' && ch == prev)
|
||||
continue;
|
||||
|
||||
*dst++ = ch;
|
||||
prev = ch;
|
||||
}
|
||||
*dst = '\0';
|
||||
}
|
||||
|
||||
int cmd_check_ref_format(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
if (argc == 3 && !strcmp(argv[1], "--branch")) {
|
||||
@@ -17,6 +39,15 @@ int cmd_check_ref_format(int argc, const char **argv, const char *prefix)
|
||||
printf("%s\n", sb.buf + 11);
|
||||
exit(0);
|
||||
}
|
||||
if (argc == 3 && !strcmp(argv[1], "--print")) {
|
||||
char *refname = xmalloc(strlen(argv[2]) + 1);
|
||||
|
||||
if (check_ref_format(argv[2]))
|
||||
exit(1);
|
||||
collapse_slashes(refname, argv[2]);
|
||||
printf("%s\n", refname);
|
||||
exit(0);
|
||||
}
|
||||
if (argc != 2)
|
||||
usage("git check-ref-format refname");
|
||||
return !!check_ref_format(argv[1]);
|
||||
|
||||
@@ -302,8 +302,9 @@ static void show_local_changes(struct object *head)
|
||||
static void describe_detached_head(char *msg, struct commit *commit)
|
||||
{
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
struct pretty_print_context ctx = {0};
|
||||
parse_commit(commit);
|
||||
pretty_print_commit(CMIT_FMT_ONELINE, commit, &sb, 0, NULL, NULL, 0, 0);
|
||||
pretty_print_commit(CMIT_FMT_ONELINE, commit, &sb, &ctx);
|
||||
fprintf(stderr, "%s %s... %s\n", msg,
|
||||
find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), sb.buf);
|
||||
strbuf_release(&sb);
|
||||
@@ -572,6 +573,40 @@ static int interactive_checkout(const char *revision, const char **pathspec,
|
||||
return run_add_interactive(revision, "--patch=checkout", pathspec);
|
||||
}
|
||||
|
||||
struct tracking_name_data {
|
||||
const char *name;
|
||||
char *remote;
|
||||
int unique;
|
||||
};
|
||||
|
||||
static int check_tracking_name(const char *refname, const unsigned char *sha1,
|
||||
int flags, void *cb_data)
|
||||
{
|
||||
struct tracking_name_data *cb = cb_data;
|
||||
const char *slash;
|
||||
|
||||
if (prefixcmp(refname, "refs/remotes/"))
|
||||
return 0;
|
||||
slash = strchr(refname + 13, '/');
|
||||
if (!slash || strcmp(slash + 1, cb->name))
|
||||
return 0;
|
||||
if (cb->remote) {
|
||||
cb->unique = 0;
|
||||
return 0;
|
||||
}
|
||||
cb->remote = xstrdup(refname);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char *unique_tracking_name(const char *name)
|
||||
{
|
||||
struct tracking_name_data cb_data = { name, NULL, 1 };
|
||||
for_each_ref(check_tracking_name, &cb_data);
|
||||
if (cb_data.unique)
|
||||
return cb_data.remote;
|
||||
free(cb_data.remote);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int cmd_checkout(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
@@ -582,6 +617,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
|
||||
struct tree *source_tree = NULL;
|
||||
char *conflict_style = NULL;
|
||||
int patch_mode = 0;
|
||||
int dwim_new_local_branch = 1;
|
||||
struct option options[] = {
|
||||
OPT__QUIET(&opts.quiet),
|
||||
OPT_STRING('b', NULL, &opts.new_branch, "new branch", "branch"),
|
||||
@@ -597,6 +633,9 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
|
||||
OPT_STRING(0, "conflict", &conflict_style, "style",
|
||||
"conflict style (merge or diff3)"),
|
||||
OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"),
|
||||
{ OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
|
||||
"second guess 'git checkout no-such-branch'",
|
||||
PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
|
||||
OPT_END(),
|
||||
};
|
||||
int has_dash_dash;
|
||||
@@ -630,8 +669,6 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
|
||||
opts.new_branch = argv0 + 1;
|
||||
}
|
||||
|
||||
if (opts.track == BRANCH_TRACK_UNSPECIFIED)
|
||||
opts.track = git_branch_track;
|
||||
if (conflict_style) {
|
||||
opts.merge = 1; /* implied */
|
||||
git_xmerge_config("merge.conflictstyle", conflict_style, NULL);
|
||||
@@ -655,6 +692,11 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
|
||||
* With no paths, if <something> is a commit, that is to
|
||||
* switch to the branch or detach HEAD at it.
|
||||
*
|
||||
* With no paths, if <something> is _not_ a commit, no -t nor -b
|
||||
* was given, and there is a tracking branch whose name is
|
||||
* <something> in one and only one remote, then this is a short-hand
|
||||
* to fork local <something> from that remote tracking branch.
|
||||
*
|
||||
* Otherwise <something> shall not be ambiguous.
|
||||
* - If it's *only* a reference, treat it like case (1).
|
||||
* - If it's only a path, treat it like case (2).
|
||||
@@ -677,7 +719,21 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
|
||||
if (get_sha1(arg, rev)) {
|
||||
if (has_dash_dash) /* case (1) */
|
||||
die("invalid reference: %s", arg);
|
||||
goto no_reference; /* case (3 -> 2) */
|
||||
if (!patch_mode &&
|
||||
dwim_new_local_branch &&
|
||||
opts.track == BRANCH_TRACK_UNSPECIFIED &&
|
||||
!opts.new_branch &&
|
||||
!check_filename(NULL, arg) &&
|
||||
argc == 1) {
|
||||
const char *remote = unique_tracking_name(arg);
|
||||
if (!remote || get_sha1(remote, rev))
|
||||
goto no_reference;
|
||||
opts.new_branch = arg;
|
||||
arg = remote;
|
||||
/* DWIMmed to create local branch */
|
||||
}
|
||||
else
|
||||
goto no_reference;
|
||||
}
|
||||
|
||||
/* we can't end up being in (2) anymore, eat the argument */
|
||||
@@ -715,6 +771,10 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
|
||||
no_reference:
|
||||
|
||||
if (opts.track == BRANCH_TRACK_UNSPECIFIED)
|
||||
opts.track = git_branch_track;
|
||||
|
||||
if (argc) {
|
||||
const char **pathspec = get_pathspec(prefix, argv);
|
||||
|
||||
|
||||
@@ -51,7 +51,9 @@ static struct option builtin_clone_options[] = {
|
||||
OPT_BOOLEAN('n', "no-checkout", &option_no_checkout,
|
||||
"don't create a checkout"),
|
||||
OPT_BOOLEAN(0, "bare", &option_bare, "create a bare repository"),
|
||||
OPT_BOOLEAN(0, "naked", &option_bare, "create a bare repository"),
|
||||
{ OPTION_BOOLEAN, 0, "naked", &option_bare, NULL,
|
||||
"create a bare repository",
|
||||
PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
|
||||
OPT_BOOLEAN(0, "mirror", &option_mirror,
|
||||
"create a mirror repository (implies bare)"),
|
||||
OPT_BOOLEAN('l', "local", &option_local,
|
||||
@@ -61,7 +63,7 @@ static struct option builtin_clone_options[] = {
|
||||
OPT_BOOLEAN('s', "shared", &option_shared,
|
||||
"setup as shared repository"),
|
||||
OPT_BOOLEAN(0, "recursive", &option_recursive,
|
||||
"setup as shared repository"),
|
||||
"initialize submodules in the clone"),
|
||||
OPT_STRING(0, "template", &option_template, "path",
|
||||
"path the template repository"),
|
||||
OPT_STRING(0, "reference", &option_reference, "repo",
|
||||
@@ -377,8 +379,13 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
|
||||
argc = parse_options(argc, argv, prefix, builtin_clone_options,
|
||||
builtin_clone_usage, 0);
|
||||
|
||||
if (argc > 2)
|
||||
usage_msg_opt("Too many arguments.",
|
||||
builtin_clone_usage, builtin_clone_options);
|
||||
|
||||
if (argc == 0)
|
||||
die("You must specify a repository to clone.");
|
||||
usage_msg_opt("You must specify a repository to clone.",
|
||||
builtin_clone_usage, builtin_clone_options);
|
||||
|
||||
if (option_mirror)
|
||||
option_bare = 1;
|
||||
|
||||
@@ -414,6 +414,47 @@ static void determine_author_info(void)
|
||||
author_date = date;
|
||||
}
|
||||
|
||||
static int ends_rfc2822_footer(struct strbuf *sb)
|
||||
{
|
||||
int ch;
|
||||
int hit = 0;
|
||||
int i, j, k;
|
||||
int len = sb->len;
|
||||
int first = 1;
|
||||
const char *buf = sb->buf;
|
||||
|
||||
for (i = len - 1; i > 0; i--) {
|
||||
if (hit && buf[i] == '\n')
|
||||
break;
|
||||
hit = (buf[i] == '\n');
|
||||
}
|
||||
|
||||
while (i < len - 1 && buf[i] == '\n')
|
||||
i++;
|
||||
|
||||
for (; i < len; i = k) {
|
||||
for (k = i; k < len && buf[k] != '\n'; k++)
|
||||
; /* do nothing */
|
||||
k++;
|
||||
|
||||
if ((buf[k] == ' ' || buf[k] == '\t') && !first)
|
||||
continue;
|
||||
|
||||
first = 0;
|
||||
|
||||
for (j = 0; i + j < len; j++) {
|
||||
ch = buf[i + j];
|
||||
if (ch == ':')
|
||||
break;
|
||||
if (isalnum(ch) ||
|
||||
(ch == '-'))
|
||||
continue;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int prepare_to_commit(const char *index_file, const char *prefix,
|
||||
struct wt_status *s)
|
||||
{
|
||||
@@ -489,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 (prefixcmp(sb.buf + i, sign_off_header))
|
||||
if (!ends_rfc2822_footer(&sb))
|
||||
strbuf_addch(&sb, '\n');
|
||||
strbuf_addbuf(&sb, &sob);
|
||||
}
|
||||
@@ -684,8 +725,10 @@ static const char *find_author_by_nickname(const char *name)
|
||||
prepare_revision_walk(&revs);
|
||||
commit = get_revision(&revs);
|
||||
if (commit) {
|
||||
struct pretty_print_context ctx = {0};
|
||||
ctx.date_mode = DATE_NORMAL;
|
||||
strbuf_release(&buf);
|
||||
format_commit_message(commit, "%an <%ae>", &buf, DATE_NORMAL);
|
||||
format_commit_message(commit, "%an <%ae>", &buf, &ctx);
|
||||
return strbuf_detach(&buf, NULL);
|
||||
}
|
||||
die("No existing author found with '%s'", name);
|
||||
@@ -942,8 +985,10 @@ static void print_summary(const char *prefix, const unsigned char *sha1)
|
||||
initial_commit ? " (root-commit)" : "");
|
||||
|
||||
if (!log_tree_commit(&rev, commit)) {
|
||||
struct pretty_print_context ctx = {0};
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
format_commit_message(commit, format + 7, &buf, DATE_NORMAL);
|
||||
ctx.date_mode = DATE_NORMAL;
|
||||
format_commit_message(commit, format + 7, &buf, &ctx);
|
||||
printf("%s\n", buf.buf);
|
||||
strbuf_release(&buf);
|
||||
}
|
||||
|
||||
@@ -372,6 +372,7 @@ static void show_info_page(const char *git_cmd)
|
||||
const char *page = cmd_to_page(git_cmd);
|
||||
setenv("INFOPATH", system_path(GIT_INFO_PATH), 1);
|
||||
execlp("info", "info", "gitman", page, NULL);
|
||||
die("no info viewer handled the request");
|
||||
}
|
||||
|
||||
static void get_html_page_path(struct strbuf *page_path, const char *page)
|
||||
@@ -416,9 +417,6 @@ int cmd_help(int argc, const char **argv, const char *prefix)
|
||||
const char *alias;
|
||||
load_command_list("git-", &main_cmds, &other_cmds);
|
||||
|
||||
setup_git_directory_gently(&nongit);
|
||||
git_config(git_help_config, NULL);
|
||||
|
||||
argc = parse_options(argc, argv, prefix, builtin_help_options,
|
||||
builtin_help_usage, 0);
|
||||
|
||||
@@ -429,6 +427,9 @@ int cmd_help(int argc, const char **argv, const char *prefix)
|
||||
return 0;
|
||||
}
|
||||
|
||||
setup_git_directory_gently(&nongit);
|
||||
git_config(git_help_config, NULL);
|
||||
|
||||
if (!argv[0]) {
|
||||
printf("usage: %s\n\n", git_usage_string);
|
||||
list_common_cmds_help();
|
||||
|
||||
@@ -1304,8 +1304,9 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
|
||||
|
||||
if (verbose) {
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
struct pretty_print_context ctx = {0};
|
||||
pretty_print_commit(CMIT_FMT_ONELINE, commit,
|
||||
&buf, 0, NULL, NULL, 0, 0);
|
||||
&buf, &ctx);
|
||||
printf("%c %s %s\n", sign,
|
||||
sha1_to_hex(commit->object.sha1), buf.buf);
|
||||
strbuf_release(&buf);
|
||||
|
||||
@@ -86,10 +86,10 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
|
||||
pattern[j - i] = p;
|
||||
}
|
||||
}
|
||||
remote = nongit ? NULL : remote_get(dest);
|
||||
if (remote && !remote->url_nr)
|
||||
remote = remote_get(dest);
|
||||
if (!remote->url_nr)
|
||||
die("remote %s has no configured URL", dest);
|
||||
transport = transport_get(remote, remote ? remote->url[0] : dest);
|
||||
transport = transport_get(remote, remote->url[0]);
|
||||
if (uploadpack != NULL)
|
||||
transport_set_option(transport, TRANS_OPT_UPLOADPACK, uploadpack);
|
||||
|
||||
|
||||
@@ -264,6 +264,7 @@ static void squash_message(void)
|
||||
struct strbuf out = STRBUF_INIT;
|
||||
struct commit_list *j;
|
||||
int fd;
|
||||
struct pretty_print_context ctx = {0};
|
||||
|
||||
printf("Squash commit -- not updating HEAD\n");
|
||||
fd = open(git_path("SQUASH_MSG"), O_WRONLY | O_CREAT, 0666);
|
||||
@@ -285,13 +286,15 @@ static void squash_message(void)
|
||||
if (prepare_revision_walk(&rev))
|
||||
die("revision walk setup failed");
|
||||
|
||||
ctx.abbrev = rev.abbrev;
|
||||
ctx.date_mode = rev.date_mode;
|
||||
|
||||
strbuf_addstr(&out, "Squashed commit of the following:\n");
|
||||
while ((commit = get_revision(&rev)) != NULL) {
|
||||
strbuf_addch(&out, '\n');
|
||||
strbuf_addf(&out, "commit %s\n",
|
||||
sha1_to_hex(commit->object.sha1));
|
||||
pretty_print_commit(rev.commit_format, commit, &out, rev.abbrev,
|
||||
NULL, NULL, rev.date_mode, 0);
|
||||
pretty_print_commit(rev.commit_format, commit, &out, &ctx);
|
||||
}
|
||||
if (write(fd, out.buf, out.len) < 0)
|
||||
die_errno("Writing SQUASH_MSG");
|
||||
|
||||
@@ -181,7 +181,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
|
||||
OPT_BIT( 0 , "all", &flags, "push all refs", TRANSPORT_PUSH_ALL),
|
||||
OPT_BIT( 0 , "mirror", &flags, "mirror all refs",
|
||||
(TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE)),
|
||||
OPT_BOOLEAN( 0 , "tags", &tags, "push tags (can't be used with --all or --mirror"),
|
||||
OPT_BOOLEAN( 0 , "tags", &tags, "push tags (can't be used with --all or --mirror)"),
|
||||
OPT_BIT('n' , "dry-run", &flags, "dry run", TRANSPORT_PUSH_DRY_RUN),
|
||||
OPT_BIT( 0, "porcelain", &flags, "machine-readable output", TRANSPORT_PUSH_PORCELAIN),
|
||||
OPT_BIT('f', "force", &flags, "force updates", TRANSPORT_PUSH_FORCE),
|
||||
|
||||
@@ -96,9 +96,10 @@ static void show_commit(struct commit *commit, void *data)
|
||||
|
||||
if (revs->verbose_header && commit->buffer) {
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
pretty_print_commit(revs->commit_format, commit,
|
||||
&buf, revs->abbrev, NULL, NULL,
|
||||
revs->date_mode, 0);
|
||||
struct pretty_print_context ctx = {0};
|
||||
ctx.abbrev = revs->abbrev;
|
||||
ctx.date_mode = revs->date_mode;
|
||||
pretty_print_commit(revs->commit_format, commit, &buf, &ctx);
|
||||
if (revs->graph) {
|
||||
if (buf.len) {
|
||||
if (revs->commit_format != CMIT_FMT_ONELINE)
|
||||
|
||||
@@ -158,9 +158,12 @@ void shortlog_add_commit(struct shortlog *log, struct commit *commit)
|
||||
sha1_to_hex(commit->object.sha1));
|
||||
if (log->user_format) {
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
|
||||
pretty_print_commit(CMIT_FMT_USERFORMAT, commit, &buf,
|
||||
DEFAULT_ABBREV, "", "", DATE_NORMAL, 0);
|
||||
struct pretty_print_context ctx = {0};
|
||||
ctx.abbrev = DEFAULT_ABBREV;
|
||||
ctx.subject = "";
|
||||
ctx.after_subject = "";
|
||||
ctx.date_mode = DATE_NORMAL;
|
||||
pretty_print_commit(CMIT_FMT_USERFORMAT, commit, &buf, &ctx);
|
||||
insert_one_record(log, author, buf.buf);
|
||||
strbuf_release(&buf);
|
||||
return;
|
||||
|
||||
@@ -293,8 +293,8 @@ static void show_one_commit(struct commit *commit, int no_name)
|
||||
struct commit_name *name = commit->util;
|
||||
|
||||
if (commit->object.parsed) {
|
||||
pretty_print_commit(CMIT_FMT_ONELINE, commit,
|
||||
&pretty, 0, NULL, NULL, 0, 0);
|
||||
struct pretty_print_context ctx = {0};
|
||||
pretty_print_commit(CMIT_FMT_ONELINE, commit, &pretty, &ctx);
|
||||
pretty_str = pretty.buf;
|
||||
}
|
||||
if (!prefixcmp(pretty_str, "[PATCH] "))
|
||||
|
||||
1
cache.h
1
cache.h
@@ -396,6 +396,7 @@ extern const char *setup_git_directory_gently(int *);
|
||||
extern const char *setup_git_directory(void);
|
||||
extern const char *prefix_path(const char *prefix, int len, const char *path);
|
||||
extern const char *prefix_filename(const char *prefix, int len, const char *path);
|
||||
extern int check_filename(const char *prefix, const char *name);
|
||||
extern void verify_filename(const char *prefix, const char *name);
|
||||
extern void verify_non_filename(const char *prefix, const char *name);
|
||||
|
||||
|
||||
4
commit.c
4
commit.c
@@ -132,8 +132,8 @@ struct commit_graft *read_graft_line(char *buf, int len)
|
||||
int i;
|
||||
struct commit_graft *graft = NULL;
|
||||
|
||||
if (buf[len-1] == '\n')
|
||||
buf[--len] = 0;
|
||||
while (len && isspace(buf[len-1]))
|
||||
buf[--len] = '\0';
|
||||
if (buf[0] == '#' || buf[0] == '\0')
|
||||
return NULL;
|
||||
if ((len + 1) % 41) {
|
||||
|
||||
20
commit.h
20
commit.h
@@ -63,6 +63,16 @@ enum cmit_fmt {
|
||||
CMIT_FMT_UNSPECIFIED,
|
||||
};
|
||||
|
||||
struct pretty_print_context
|
||||
{
|
||||
int abbrev;
|
||||
const char *subject;
|
||||
const char *after_subject;
|
||||
enum date_mode date_mode;
|
||||
int need_8bit_cte;
|
||||
struct reflog_walk_info *reflog_info;
|
||||
};
|
||||
|
||||
extern int non_ascii(int);
|
||||
extern int has_non_ascii(const char *text);
|
||||
struct rev_info; /* in revision.h, it circularly uses enum cmit_fmt */
|
||||
@@ -71,12 +81,10 @@ extern char *reencode_commit_message(const struct commit *commit,
|
||||
extern void get_commit_format(const char *arg, struct rev_info *);
|
||||
extern void format_commit_message(const struct commit *commit,
|
||||
const char *format, struct strbuf *sb,
|
||||
enum date_mode dmode);
|
||||
extern void pretty_print_commit(enum cmit_fmt fmt, const struct commit*,
|
||||
struct strbuf *,
|
||||
int abbrev, const char *subject,
|
||||
const char *after_subject, enum date_mode,
|
||||
int need_8bit_cte);
|
||||
const struct pretty_print_context *context);
|
||||
extern void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
|
||||
struct strbuf *sb,
|
||||
const struct pretty_print_context *context);
|
||||
void pp_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb,
|
||||
const char *line, enum date_mode dmode,
|
||||
const char *encoding);
|
||||
|
||||
@@ -28,6 +28,16 @@ static inline uint32_t default_swab32(uint32_t val)
|
||||
} \
|
||||
__res; })
|
||||
|
||||
#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#define bswap32(x) _byteswap_ulong(x)
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef bswap32
|
||||
|
||||
#undef ntohl
|
||||
#undef htonl
|
||||
#define ntohl(x) bswap32(x)
|
||||
|
||||
@@ -178,6 +178,7 @@ sub createLibProject {
|
||||
MinimalRebuild="true"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
ProgramDataBaseFileName="\$(IntDir)\\\$(TargetName).pdb"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
@@ -244,6 +245,7 @@ sub createLibProject {
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
ProgramDataBaseFileName="\$(IntDir)\\\$(TargetName).pdb"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
@@ -401,6 +403,7 @@ sub createAppProject {
|
||||
MinimalRebuild="true"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
ProgramDataBaseFileName="\$(IntDir)\\\$(TargetName).pdb"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
@@ -472,6 +475,7 @@ sub createAppProject {
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
ProgramDataBaseFileName="\$(IntDir)\\\$(TargetName).pdb"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
|
||||
@@ -958,6 +958,8 @@ __git_mergetools_common="diffuse ecmerge emerge kdiff3 meld opendiff
|
||||
|
||||
_git_difftool ()
|
||||
{
|
||||
__git_has_doubledash && return
|
||||
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
case "$cur" in
|
||||
--tool=*)
|
||||
@@ -965,11 +967,15 @@ _git_difftool ()
|
||||
return
|
||||
;;
|
||||
--*)
|
||||
__gitcomp "--tool="
|
||||
__gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
|
||||
--base --ours --theirs
|
||||
--no-renames --diff-filter= --find-copies-harder
|
||||
--relative --ignore-submodules
|
||||
--tool="
|
||||
return
|
||||
;;
|
||||
esac
|
||||
COMPREPLY=()
|
||||
__git_complete_file
|
||||
}
|
||||
|
||||
__git_fetch_options="
|
||||
@@ -1323,8 +1329,18 @@ _git_rebase ()
|
||||
fi
|
||||
__git_complete_strategy && return
|
||||
case "$cur" in
|
||||
--whitespace=*)
|
||||
__gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
|
||||
return
|
||||
;;
|
||||
--*)
|
||||
__gitcomp "--onto --merge --strategy --interactive"
|
||||
__gitcomp "
|
||||
--onto --merge --strategy --interactive
|
||||
--preserve-merges --stat --no-stat
|
||||
--committer-date-is-author-date --ignore-date
|
||||
--ignore-whitespace --whitespace=
|
||||
"
|
||||
|
||||
return
|
||||
esac
|
||||
__gitcomp "$(__git_refs)"
|
||||
|
||||
18
diff.c
18
diff.c
@@ -13,6 +13,7 @@
|
||||
#include "utf8.h"
|
||||
#include "userdiff.h"
|
||||
#include "sigchain.h"
|
||||
#include "submodule.h"
|
||||
|
||||
#ifdef NO_FAST_WORKING_DIRECTORY
|
||||
#define FAST_WORKING_DIRECTORY 0
|
||||
@@ -1557,6 +1558,17 @@ static void builtin_diff(const char *name_a,
|
||||
const char *a_prefix, *b_prefix;
|
||||
const char *textconv_one = NULL, *textconv_two = NULL;
|
||||
|
||||
if (DIFF_OPT_TST(o, SUBMODULE_LOG) &&
|
||||
(!one->mode || S_ISGITLINK(one->mode)) &&
|
||||
(!two->mode || S_ISGITLINK(two->mode))) {
|
||||
const char *del = diff_get_color_opt(o, DIFF_FILE_OLD);
|
||||
const char *add = diff_get_color_opt(o, DIFF_FILE_NEW);
|
||||
show_submodule_summary(o->file, one ? one->path : two->path,
|
||||
one->sha1, two->sha1,
|
||||
del, add, reset);
|
||||
return;
|
||||
}
|
||||
|
||||
if (DIFF_OPT_TST(o, ALLOW_TEXTCONV)) {
|
||||
textconv_one = get_textconv(one);
|
||||
textconv_two = get_textconv(two);
|
||||
@@ -2757,6 +2769,12 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
|
||||
DIFF_OPT_CLR(options, ALLOW_TEXTCONV);
|
||||
else if (!strcmp(arg, "--ignore-submodules"))
|
||||
DIFF_OPT_SET(options, IGNORE_SUBMODULES);
|
||||
else if (!strcmp(arg, "--submodule"))
|
||||
DIFF_OPT_SET(options, SUBMODULE_LOG);
|
||||
else if (!prefixcmp(arg, "--submodule=")) {
|
||||
if (!strcmp(arg + 12, "log"))
|
||||
DIFF_OPT_SET(options, SUBMODULE_LOG);
|
||||
}
|
||||
|
||||
/* misc options */
|
||||
else if (!strcmp(arg, "-z"))
|
||||
|
||||
3
diff.h
3
diff.h
@@ -66,6 +66,9 @@ typedef void (*diff_format_fn_t)(struct diff_queue_struct *q,
|
||||
#define DIFF_OPT_DIRSTAT_CUMULATIVE (1 << 19)
|
||||
#define DIFF_OPT_DIRSTAT_BY_FILE (1 << 20)
|
||||
#define DIFF_OPT_ALLOW_TEXTCONV (1 << 21)
|
||||
|
||||
#define DIFF_OPT_SUBMODULE_LOG (1 << 23)
|
||||
|
||||
#define DIFF_OPT_TST(opts, flag) ((opts)->flags & DIFF_OPT_##flag)
|
||||
#define DIFF_OPT_SET(opts, flag) ((opts)->flags |= DIFF_OPT_##flag)
|
||||
#define DIFF_OPT_CLR(opts, flag) ((opts)->flags &= ~DIFF_OPT_##flag)
|
||||
|
||||
@@ -13,8 +13,8 @@ git bisect skip [(<rev>|<range>)...]
|
||||
mark <rev>... untestable revisions.
|
||||
git bisect next
|
||||
find next bisection to test and check it out.
|
||||
git bisect reset [<branch>]
|
||||
finish bisection search and go back to branch.
|
||||
git bisect reset [<commit>]
|
||||
finish bisection search and go back to commit.
|
||||
git bisect visualize
|
||||
show bisect status in gitk.
|
||||
git bisect replay <logfile>
|
||||
@@ -311,8 +311,8 @@ bisect_reset() {
|
||||
}
|
||||
case "$#" in
|
||||
0) branch=$(cat "$GIT_DIR/BISECT_START") ;;
|
||||
1) git show-ref --verify --quiet -- "refs/heads/$1" ||
|
||||
die "$1 does not seem to be a valid branch"
|
||||
1) git rev-parse --quiet --verify "$1^{commit}" > /dev/null ||
|
||||
die "'$1' is not a valid commit"
|
||||
branch="$1" ;;
|
||||
*)
|
||||
usage ;;
|
||||
|
||||
@@ -745,6 +745,8 @@ set default_config(gui.newbranchtemplate) {}
|
||||
set default_config(gui.spellingdictionary) {}
|
||||
set default_config(gui.fontui) [font configure font_ui]
|
||||
set default_config(gui.fontdiff) [font configure font_diff]
|
||||
# TODO: this option should be added to the git-config documentation
|
||||
set default_config(gui.maxfilesdisplayed) 5000
|
||||
set font_descs {
|
||||
{fontui font_ui {mc "Main Font"}}
|
||||
{fontdiff font_diff {mc "Diff/Console Font"}}
|
||||
@@ -1132,6 +1134,7 @@ set current_branch {}
|
||||
set is_detached 0
|
||||
set current_diff_path {}
|
||||
set is_3way_diff 0
|
||||
set is_submodule_diff 0
|
||||
set is_conflict_diff 0
|
||||
set selected_commit_type new
|
||||
set diff_empty_count 0
|
||||
@@ -1698,10 +1701,12 @@ proc display_all_files_helper {w path icon_name m} {
|
||||
$w insert end "[escape_path $path]\n"
|
||||
}
|
||||
|
||||
set files_warning 0
|
||||
proc display_all_files {} {
|
||||
global ui_index ui_workdir
|
||||
global file_states file_lists
|
||||
global last_clicked
|
||||
global files_warning
|
||||
|
||||
$ui_index conf -state normal
|
||||
$ui_workdir conf -state normal
|
||||
@@ -1713,7 +1718,18 @@ proc display_all_files {} {
|
||||
set file_lists($ui_index) [list]
|
||||
set file_lists($ui_workdir) [list]
|
||||
|
||||
foreach path [lsort [array names file_states]] {
|
||||
set to_display [lsort [array names file_states]]
|
||||
set display_limit [get_config gui.maxfilesdisplayed]
|
||||
if {[llength $to_display] > $display_limit} {
|
||||
if {!$files_warning} {
|
||||
# do not repeatedly warn:
|
||||
set files_warning 1
|
||||
info_popup [mc "Displaying only %s of %s files." \
|
||||
$display_limit [llength $to_display]]
|
||||
}
|
||||
set to_display [lrange $to_display 0 [expr {$display_limit-1}]]
|
||||
}
|
||||
foreach path $to_display {
|
||||
set s $file_states($path)
|
||||
set m [lindex $s 0]
|
||||
set icon_name [lindex $s 1]
|
||||
@@ -2010,6 +2026,19 @@ proc do_quit {{rc {1}}} {
|
||||
|
||||
# -- Stash our current window geometry into this repository.
|
||||
#
|
||||
set cfg_wmstate [wm state .]
|
||||
if {[catch {set rc_wmstate $repo_config(gui.wmstate)}]} {
|
||||
set rc_wmstate {}
|
||||
}
|
||||
if {$cfg_wmstate ne $rc_wmstate} {
|
||||
catch {git config gui.wmstate $cfg_wmstate}
|
||||
}
|
||||
if {$cfg_wmstate eq {zoomed}} {
|
||||
# on Windows wm geometry will lie about window
|
||||
# position (but not size) when window is zoomed
|
||||
# restore the window before querying wm geometry
|
||||
wm state . normal
|
||||
}
|
||||
set cfg_geometry [list]
|
||||
lappend cfg_geometry [wm geometry .]
|
||||
lappend cfg_geometry [lindex [.vpane sash coord 0] 0]
|
||||
@@ -3054,7 +3083,7 @@ frame .vpane.lower.diff.body
|
||||
set ui_diff .vpane.lower.diff.body.t
|
||||
text $ui_diff -background white -foreground black \
|
||||
-borderwidth 0 \
|
||||
-width 80 -height 15 -wrap none \
|
||||
-width 80 -height 5 -wrap none \
|
||||
-font font_diff \
|
||||
-xscrollcommand {.vpane.lower.diff.body.sbx set} \
|
||||
-yscrollcommand {.vpane.lower.diff.body.sby set} \
|
||||
@@ -3212,7 +3241,7 @@ proc popup_diff_menu {ctxm ctxmmg x y X Y} {
|
||||
set l [mc "Stage Hunk For Commit"]
|
||||
set t [mc "Stage Line For Commit"]
|
||||
}
|
||||
if {$::is_3way_diff
|
||||
if {$::is_3way_diff || $::is_submodule_diff
|
||||
|| $current_diff_path eq {}
|
||||
|| {__} eq $state
|
||||
|| {_O} eq $state
|
||||
@@ -3249,6 +3278,14 @@ wm geometry . [lindex $gm 0]
|
||||
unset gm
|
||||
}
|
||||
|
||||
# -- Load window state
|
||||
#
|
||||
catch {
|
||||
set gws $repo_config(gui.wmstate)
|
||||
wm state . $gws
|
||||
unset gws
|
||||
}
|
||||
|
||||
# -- Key Bindings
|
||||
#
|
||||
bind $ui_comm <$M1B-Key-Return> {do_commit;break}
|
||||
|
||||
@@ -255,7 +255,7 @@ proc show_other_diff {path w m cont_info} {
|
||||
|
||||
proc start_show_diff {cont_info {add_opts {}}} {
|
||||
global file_states file_lists
|
||||
global is_3way_diff diff_active repo_config
|
||||
global is_3way_diff is_submodule_diff diff_active repo_config
|
||||
global ui_diff ui_index ui_workdir
|
||||
global current_diff_path current_diff_side current_diff_header
|
||||
|
||||
@@ -265,6 +265,7 @@ proc start_show_diff {cont_info {add_opts {}}} {
|
||||
set s $file_states($path)
|
||||
set m [lindex $s 0]
|
||||
set is_3way_diff 0
|
||||
set is_submodule_diff 0
|
||||
set diff_active 1
|
||||
set current_diff_header {}
|
||||
|
||||
@@ -295,6 +296,16 @@ proc start_show_diff {cont_info {add_opts {}}} {
|
||||
lappend cmd $path
|
||||
}
|
||||
|
||||
if {[string match {160000 *} [lindex $s 2]]
|
||||
|| [string match {160000 *} [lindex $s 3]]} {
|
||||
set is_submodule_diff 1
|
||||
if {$w eq $ui_index} {
|
||||
set cmd [list submodule summary --cached -- $path]
|
||||
} else {
|
||||
set cmd [list submodule summary --files -- $path]
|
||||
}
|
||||
}
|
||||
|
||||
if {[catch {set fd [eval git_read --nice $cmd]} err]} {
|
||||
set diff_active 0
|
||||
unlock_index
|
||||
@@ -312,7 +323,7 @@ proc start_show_diff {cont_info {add_opts {}}} {
|
||||
}
|
||||
|
||||
proc read_diff {fd cont_info} {
|
||||
global ui_diff diff_active
|
||||
global ui_diff diff_active is_submodule_diff
|
||||
global is_3way_diff is_conflict_diff current_diff_header
|
||||
global current_diff_queue
|
||||
global diff_empty_count
|
||||
@@ -374,6 +385,23 @@ proc read_diff {fd cont_info} {
|
||||
set tags {}
|
||||
}
|
||||
}
|
||||
} elseif {$is_submodule_diff} {
|
||||
if {$line == ""} continue
|
||||
if {[regexp {^\* } $line]} {
|
||||
set line [string replace $line 0 1 {Submodule }]
|
||||
set tags d_@
|
||||
} else {
|
||||
set op [string range $line 0 2]
|
||||
switch -- $op {
|
||||
{ <} {set tags d_-}
|
||||
{ >} {set tags d_+}
|
||||
{ W} {set tags {}}
|
||||
default {
|
||||
puts "error: Unhandled submodule diff marker: {$op}"
|
||||
set tags {}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
set op [string index $line 0]
|
||||
switch -- $op {
|
||||
|
||||
@@ -208,13 +208,15 @@ method _delete {} {
|
||||
return
|
||||
}
|
||||
|
||||
if {[tk_messageBox \
|
||||
-icon warning \
|
||||
-type yesno \
|
||||
-title [wm title $w] \
|
||||
-parent $w \
|
||||
-message [mc "Recovering deleted branches is difficult.\n\nDelete the selected branches?"]] ne yes} {
|
||||
return
|
||||
if {$checktype ne {head}} {
|
||||
if {[tk_messageBox \
|
||||
-icon warning \
|
||||
-type yesno \
|
||||
-title [wm title $w] \
|
||||
-parent $w \
|
||||
-message [mc "Recovering deleted branches is difficult.\n\nDelete the selected branches?"]] ne yes} {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
destroy $w
|
||||
|
||||
2005
git-gui/po/el.po
Normal file
2005
git-gui/po/el.po
Normal file
File diff suppressed because it is too large
Load Diff
@@ -90,6 +90,11 @@ msgstr ""
|
||||
msgid "Ready."
|
||||
msgstr ""
|
||||
|
||||
#: git-gui.sh:1726
|
||||
#, tcl-format
|
||||
msgid "Displaying only %s of %s files."
|
||||
msgstr ""
|
||||
|
||||
#: git-gui.sh:1819
|
||||
msgid "Unmodified"
|
||||
msgstr ""
|
||||
|
||||
171
git-gui/po/glossary/el.po
Normal file
171
git-gui/po/glossary/el.po
Normal file
@@ -0,0 +1,171 @@
|
||||
# Translation of git-gui glossary to Greek
|
||||
# Copyright (C) 2009 Jimmy Angelakos
|
||||
# This file is distributed under the same license as the git-gui package.
|
||||
# Jimmy Angelakos <vyruss@hellug.gr>, 2009.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: git-gui-glossary\n"
|
||||
"POT-Creation-Date: 2008-01-07 21:20+0100\n"
|
||||
"PO-Revision-Date: 2009-06-23 20:41+0300\n"
|
||||
"Last-Translator: Jimmy Angelakos <vyruss@hellug.gr>\n"
|
||||
"Language-Team: Greek <i18n@lists.hellug.gr>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Lokalize 0.3\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#. "English Definition (Dear translator: This file will never be visible to the user! It should only serve as a tool for you, the translator. Nothing more.)"
|
||||
msgid "English Term (Dear translator: This file will never be visible to the user!)"
|
||||
msgstr ""
|
||||
|
||||
#. ""
|
||||
msgid "amend"
|
||||
msgstr "διόρθωση"
|
||||
|
||||
#. ""
|
||||
msgid "annotate"
|
||||
msgstr "σχολιασμός"
|
||||
|
||||
#. "A 'branch' is an active line of development."
|
||||
msgid "branch [noun]"
|
||||
msgstr "κλάδος [αντικείμενο]"
|
||||
|
||||
#. ""
|
||||
msgid "branch [verb]"
|
||||
msgstr "διακλάδωση [ενέργεια]"
|
||||
|
||||
#. ""
|
||||
msgid "checkout [noun]"
|
||||
msgstr "εξαγωγή [αντικείμενο]"
|
||||
|
||||
#. "The action of updating the working tree to a revision which was stored in the object database."
|
||||
msgid "checkout [verb]"
|
||||
msgstr "εξαγωγή [ενέργεια]"
|
||||
|
||||
#. ""
|
||||
msgid "clone [verb]"
|
||||
msgstr "κλωνοποίηση [ενέργεια]"
|
||||
|
||||
#. "A single point in the git history."
|
||||
msgid "commit [noun]"
|
||||
msgstr "υποβολή [αντικείμενο] "
|
||||
|
||||
#. "The action of storing a new snapshot of the project's state in the git history."
|
||||
msgid "commit [verb]"
|
||||
msgstr "υποβολή [ενέργεια]"
|
||||
|
||||
#. ""
|
||||
msgid "diff [noun]"
|
||||
msgstr "διαφορά [αντικείμενο] "
|
||||
|
||||
#. ""
|
||||
msgid "diff [verb]"
|
||||
msgstr "διαφορά [ενέργεια]"
|
||||
|
||||
#. "A fast-forward is a special type of merge where you have a revision and you are merging another branch's changes that happen to be a descendant of what you have."
|
||||
msgid "fast forward merge"
|
||||
msgstr "συγχώνευση επιτάχυνσης"
|
||||
|
||||
#. "Fetching a branch means to get the branch's head from a remote repository, to find out which objects are missing from the local object database, and to get them, too."
|
||||
msgid "fetch"
|
||||
msgstr "ανάκτηση"
|
||||
|
||||
#. "One context of consecutive lines in a whole patch, which consists of many such hunks"
|
||||
msgid "hunk"
|
||||
msgstr "κομμάτι"
|
||||
|
||||
#. "A collection of files. The index is a stored version of your working tree."
|
||||
msgid "index (in git-gui: staging area)"
|
||||
msgstr "ευρετήριο (στο git-gui: περιοχή σταδιοποίησης)"
|
||||
|
||||
#. "A successful merge results in the creation of a new commit representing the result of the merge."
|
||||
msgid "merge [noun]"
|
||||
msgstr "συγχώνευση [αντικείμενο]"
|
||||
|
||||
#. "To bring the contents of another branch into the current branch."
|
||||
msgid "merge [verb]"
|
||||
msgstr "συγχώνευση [ενέργεια]"
|
||||
|
||||
#. ""
|
||||
msgid "message"
|
||||
msgstr "μήνυμα"
|
||||
|
||||
#. "Deletes all stale tracking branches under <name>. These stale branches have already been removed from the remote repository referenced by <name>, but are still locally available in 'remotes/<name>'."
|
||||
msgid "prune"
|
||||
msgstr "κλάδεμα"
|
||||
|
||||
#. "Pulling a branch means to fetch it and merge it."
|
||||
msgid "pull"
|
||||
msgstr "λήψη"
|
||||
|
||||
#. "Pushing a branch means to get the branch's head ref from a remote repository, and ... (well, can someone please explain it for mere mortals?)"
|
||||
msgid "push"
|
||||
msgstr "ώθηση"
|
||||
|
||||
#. ""
|
||||
msgid "redo"
|
||||
msgstr "ξανά"
|
||||
|
||||
#. "An other repository ('remote'). One might have a set of remotes whose branches one tracks."
|
||||
msgid "remote"
|
||||
msgstr "απομακρυσμένο"
|
||||
|
||||
#. "A collection of refs (?) together with an object database containing all objects which are reachable from the refs... (oops, you've lost me here. Again, please an explanation for mere mortals?)"
|
||||
msgid "repository"
|
||||
msgstr "αποθετήριο"
|
||||
|
||||
#. ""
|
||||
msgid "reset"
|
||||
msgstr "επαναφορά"
|
||||
|
||||
#. ""
|
||||
msgid "revert"
|
||||
msgstr "αναίρεση"
|
||||
|
||||
#. "A particular state of files and directories which was stored in the object database."
|
||||
msgid "revision"
|
||||
msgstr "αναθεώρηση"
|
||||
|
||||
#. ""
|
||||
#, fuzzy
|
||||
msgid "sign off"
|
||||
msgstr "αποσύνδεση"
|
||||
|
||||
#. ""
|
||||
msgid "staging area"
|
||||
msgstr "περιοχή σταδιοποίησης"
|
||||
|
||||
#. ""
|
||||
msgid "status"
|
||||
msgstr "κατάσταση"
|
||||
|
||||
#. "A ref pointing to a tag or commit object"
|
||||
msgid "tag [noun]"
|
||||
msgstr "ετικέτα [αντικείμενο]"
|
||||
|
||||
#. ""
|
||||
msgid "tag [verb]"
|
||||
msgstr "ετικέτα [ενέργεια]"
|
||||
|
||||
#. "A regular git branch that is used to follow changes from another repository."
|
||||
msgid "tracking branch"
|
||||
msgstr "κλάδος παρακολούθησης"
|
||||
|
||||
#. ""
|
||||
msgid "undo"
|
||||
msgstr "αναίρεση"
|
||||
|
||||
#. ""
|
||||
msgid "update"
|
||||
msgstr "ενημέρωση"
|
||||
|
||||
#. ""
|
||||
msgid "verify"
|
||||
msgstr "επαλήθευση"
|
||||
|
||||
#. "The tree of actual checked out files."
|
||||
msgid "working copy, working tree"
|
||||
msgstr "αντίγραφο εργασίας"
|
||||
|
||||
|
||||
@@ -90,12 +90,18 @@ msgstr "Вызов программы поддержки репозитория
|
||||
|
||||
#: git-gui.sh:1384
|
||||
msgid "Commit declined by prepare-commit-msg hook."
|
||||
msgstr "Сохранение прервано программой поддержки репозитория prepare-commit-msg"
|
||||
msgstr ""
|
||||
"Сохранение прервано программой поддержки репозитория prepare-commit-msg"
|
||||
|
||||
#: git-gui.sh:1542 lib/browser.tcl:246
|
||||
msgid "Ready."
|
||||
msgstr "Готово."
|
||||
|
||||
#: git-gui.sh:1726
|
||||
#, tcl-format
|
||||
msgid "Displaying only %s of %s files."
|
||||
msgstr "Показано %s из %s файлов."
|
||||
|
||||
#: git-gui.sh:1819
|
||||
msgid "Unmodified"
|
||||
msgstr "Не изменено"
|
||||
@@ -1297,8 +1303,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Невозможно исправить состояние во время операции слияния.\n"
|
||||
"\n"
|
||||
"Текущее слияние не завершено. Невозможно исправить предыдущее "
|
||||
"сохраненное состояние, не прерывая эту операцию.\n"
|
||||
"Текущее слияние не завершено. Невозможно исправить предыдущее сохраненное "
|
||||
"состояние, не прерывая эту операцию.\n"
|
||||
|
||||
#: lib/commit.tcl:48
|
||||
msgid "Error loading commit data for amend:"
|
||||
@@ -1723,8 +1729,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Невозможно выполнить слияние во время исправления.\n"
|
||||
"\n"
|
||||
"Завершите исправление данного состояния перед выполнением операции "
|
||||
"слияния.\n"
|
||||
"Завершите исправление данного состояния перед выполнением операции слияния.\n"
|
||||
|
||||
#: lib/merge.tcl:27
|
||||
msgid ""
|
||||
@@ -1888,8 +1893,8 @@ msgstr ""
|
||||
#, tcl-format
|
||||
msgid "File %s seems to have unresolved conflicts, still stage?"
|
||||
msgstr ""
|
||||
"Файл %s кажется содержит необработаные конфликты. "
|
||||
"Продолжить подготовку к сохранению?"
|
||||
"Файл %s кажется содержит необработаные конфликты. Продолжить подготовку к "
|
||||
"сохранению?"
|
||||
|
||||
#: lib/mergetool.tcl:60
|
||||
#, tcl-format
|
||||
@@ -2213,8 +2218,8 @@ msgid ""
|
||||
"One or more of the merge tests failed because you have not fetched the "
|
||||
"necessary commits. Try fetching from %s first."
|
||||
msgstr ""
|
||||
"Некоторые тесты на слияние не прошли, потому что Вы не "
|
||||
"получили необходимые состояния. Попытайтесь получить их из %s."
|
||||
"Некоторые тесты на слияние не прошли, потому что Вы не получили необходимые "
|
||||
"состояния. Попытайтесь получить их из %s."
|
||||
|
||||
#: lib/remote_branch_delete.tcl:207
|
||||
msgid "Please select one or more branches to delete."
|
||||
@@ -2381,8 +2386,8 @@ msgstr "Выполнение: %s"
|
||||
|
||||
#: lib/tools.tcl:149
|
||||
#, tcl-format
|
||||
msgid "Tool completed succesfully: %s"
|
||||
msgstr "Программа %s успешно завершилась."
|
||||
msgid "Tool completed successfully: %s"
|
||||
msgstr "Программа %s завершилась успешно."
|
||||
|
||||
#: lib/tools.tcl:151
|
||||
#, tcl-format
|
||||
@@ -2538,4 +2543,3 @@ msgstr "Использовать thin pack (для медленных сетев
|
||||
#: lib/transport.tcl:179
|
||||
msgid "Include tags"
|
||||
msgstr "Передать метки"
|
||||
|
||||
|
||||
@@ -416,7 +416,12 @@ do_next () {
|
||||
;;
|
||||
*)
|
||||
warn "Unknown command: $command $sha1 $rest"
|
||||
die_with_patch $sha1 "Please fix this in the file $TODO."
|
||||
if git rev-parse --verify -q "$sha1" >/dev/null
|
||||
then
|
||||
die_with_patch $sha1 "Please fix this in the file $TODO."
|
||||
else
|
||||
die "Please fix this in the file $TODO."
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
test -s "$TODO" && return
|
||||
|
||||
@@ -205,8 +205,7 @@ have_stash () {
|
||||
|
||||
list_stash () {
|
||||
have_stash || return 0
|
||||
git log --no-color --pretty=oneline -g "$@" $ref_stash -- |
|
||||
sed -n -e 's/^[.0-9a-f]* refs\///p'
|
||||
git log --format="%gd: %gs" -g "$@" $ref_stash --
|
||||
}
|
||||
|
||||
show_stash () {
|
||||
@@ -383,11 +382,6 @@ test -n "$seen_non_option" || set "save" "$@"
|
||||
case "$1" in
|
||||
list)
|
||||
shift
|
||||
if test $# = 0
|
||||
then
|
||||
set x -n 10
|
||||
shift
|
||||
fi
|
||||
list_stash "$@"
|
||||
;;
|
||||
show)
|
||||
|
||||
149
git-svn.perl
149
git-svn.perl
@@ -1765,7 +1765,7 @@ sub read_all_remotes {
|
||||
my $use_svm_props = eval { command_oneline(qw/config --bool
|
||||
svn.useSvmProps/) };
|
||||
$use_svm_props = $use_svm_props eq 'true' if $use_svm_props;
|
||||
my $svn_refspec = qr{\s*/?(.*?)\s*:\s*(.+?)\s*};
|
||||
my $svn_refspec = qr{\s*(.*?)\s*:\s*(.+?)\s*};
|
||||
foreach (grep { s/^svn-remote\.// } command(qw/config -l/)) {
|
||||
if (m!^(.+)\.fetch=$svn_refspec$!) {
|
||||
my ($remote, $local_ref, $remote_ref) = ($1, $2, $3);
|
||||
@@ -1979,7 +1979,7 @@ sub find_ref {
|
||||
my ($ref_id) = @_;
|
||||
foreach (command(qw/config -l/)) {
|
||||
next unless m!^svn-remote\.(.+)\.fetch=
|
||||
\s*/?(.*?)\s*:\s*(.+?)\s*$!x;
|
||||
\s*(.*?)\s*:\s*(.+?)\s*$!x;
|
||||
my ($repo_id, $path, $ref) = ($1, $2, $3);
|
||||
if ($ref eq $ref_id) {
|
||||
$path = '' if ($path =~ m#^\./?#);
|
||||
@@ -2878,14 +2878,157 @@ sub check_author {
|
||||
$author;
|
||||
}
|
||||
|
||||
sub find_extra_svk_parents {
|
||||
my ($self, $ed, $tickets, $parents) = @_;
|
||||
# aha! svk:merge property changed...
|
||||
my @tickets = split "\n", $tickets;
|
||||
my @known_parents;
|
||||
for my $ticket ( @tickets ) {
|
||||
my ($uuid, $path, $rev) = split /:/, $ticket;
|
||||
if ( $uuid eq $self->ra_uuid ) {
|
||||
my $url = $self->rewrite_root || $self->{url};
|
||||
my $repos_root = $url;
|
||||
my $branch_from = $path;
|
||||
$branch_from =~ s{^/}{};
|
||||
my $gs = $self->other_gs($repos_root."/".$branch_from,
|
||||
$url,
|
||||
$branch_from,
|
||||
$rev,
|
||||
$self->{ref_id});
|
||||
if ( my $commit = $gs->rev_map_get($rev, $uuid) ) {
|
||||
# wahey! we found it, but it might be
|
||||
# an old one (!)
|
||||
push @known_parents, $commit;
|
||||
}
|
||||
}
|
||||
}
|
||||
for my $parent ( @known_parents ) {
|
||||
my @cmd = ('rev-list', $parent, map { "^$_" } @$parents );
|
||||
my ($msg_fh, $ctx) = command_output_pipe(@cmd);
|
||||
my $new;
|
||||
while ( <$msg_fh> ) {
|
||||
$new=1;last;
|
||||
}
|
||||
command_close_pipe($msg_fh, $ctx);
|
||||
if ( $new ) {
|
||||
print STDERR
|
||||
"Found merge parent (svk:merge ticket): $parent\n";
|
||||
push @$parents, $parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# note: this function should only be called if the various dirprops
|
||||
# have actually changed
|
||||
sub find_extra_svn_parents {
|
||||
my ($self, $ed, $mergeinfo, $parents) = @_;
|
||||
# aha! svk:merge property changed...
|
||||
|
||||
# We first search for merged tips which are not in our
|
||||
# history. Then, we figure out which git revisions are in
|
||||
# that tip, but not this revision. If all of those revisions
|
||||
# are now marked as merge, we can add the tip as a parent.
|
||||
my @merges = split "\n", $mergeinfo;
|
||||
my @merge_tips;
|
||||
my @merged_commit_ranges;
|
||||
my $url = $self->rewrite_root || $self->{url};
|
||||
for my $merge ( @merges ) {
|
||||
my ($source, $revs) = split ":", $merge;
|
||||
my $path = $source;
|
||||
$path =~ s{^/}{};
|
||||
my $gs = Git::SVN->find_by_url($url.$source, $url, $path);
|
||||
if ( !$gs ) {
|
||||
warn "Couldn't find revmap for $url$source\n";
|
||||
next;
|
||||
}
|
||||
my @ranges = split ",", $revs;
|
||||
my ($tip, $tip_commit);
|
||||
# find the tip
|
||||
for my $range ( @ranges ) {
|
||||
my ($bottom, $top) = split "-", $range;
|
||||
$top ||= $bottom;
|
||||
my $bottom_commit =
|
||||
$gs->rev_map_get($bottom, $self->ra_uuid) ||
|
||||
$gs->rev_map_get($bottom+1, $self->ra_uuid);
|
||||
my $top_commit =
|
||||
$gs->rev_map_get($top, $self->ra_uuid);
|
||||
|
||||
unless ($top_commit and $bottom_commit) {
|
||||
warn "W:unknown path/rev in svn:mergeinfo "
|
||||
."dirprop: $source:$range\n";
|
||||
next;
|
||||
}
|
||||
|
||||
push @merged_commit_ranges,
|
||||
"$bottom_commit..$top_commit";
|
||||
|
||||
if ( !defined $tip or $top > $tip ) {
|
||||
$tip = $top;
|
||||
$tip_commit = $top_commit;
|
||||
}
|
||||
}
|
||||
unless (!$tip_commit or
|
||||
grep { $_ eq $tip_commit } @$parents ) {
|
||||
push @merge_tips, $tip_commit;
|
||||
} else {
|
||||
push @merge_tips, undef;
|
||||
}
|
||||
}
|
||||
for my $merge_tip ( @merge_tips ) {
|
||||
my $spec = shift @merges;
|
||||
next unless $merge_tip;
|
||||
my @cmd = ('rev-list', "-1", $merge_tip,
|
||||
"--not", @$parents );
|
||||
my ($msg_fh, $ctx) = command_output_pipe(@cmd);
|
||||
my $new;
|
||||
while ( <$msg_fh> ) {
|
||||
$new=1;last;
|
||||
}
|
||||
command_close_pipe($msg_fh, $ctx);
|
||||
if ( $new ) {
|
||||
push @cmd, @merged_commit_ranges;
|
||||
my ($msg_fh, $ctx) = command_output_pipe(@cmd);
|
||||
my $unmerged;
|
||||
while ( <$msg_fh> ) {
|
||||
$unmerged=1;last;
|
||||
}
|
||||
command_close_pipe($msg_fh, $ctx);
|
||||
if ( $unmerged ) {
|
||||
warn "W:svn cherry-pick ignored ($spec)\n";
|
||||
} else {
|
||||
warn
|
||||
"Found merge parent (svn:mergeinfo prop): ",
|
||||
$merge_tip, "\n";
|
||||
push @$parents, $merge_tip;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub make_log_entry {
|
||||
my ($self, $rev, $parents, $ed) = @_;
|
||||
my $untracked = $self->get_untracked($ed);
|
||||
|
||||
my @parents = @$parents;
|
||||
my $ps = $ed->{path_strip} || "";
|
||||
for my $path ( grep { m/$ps/ } %{$ed->{dir_prop}} ) {
|
||||
my $props = $ed->{dir_prop}{$path};
|
||||
if ( $props->{"svk:merge"} ) {
|
||||
$self->find_extra_svk_parents
|
||||
($ed, $props->{"svk:merge"}, \@parents);
|
||||
}
|
||||
if ( $props->{"svn:mergeinfo"} ) {
|
||||
$self->find_extra_svn_parents
|
||||
($ed,
|
||||
$props->{"svn:mergeinfo"},
|
||||
\@parents);
|
||||
}
|
||||
}
|
||||
|
||||
open my $un, '>>', "$self->{dir}/unhandled.log" or croak $!;
|
||||
print $un "r$rev\n" or croak $!;
|
||||
print $un $_, "\n" foreach @$untracked;
|
||||
my %log_entry = ( parents => $parents || [], revision => $rev,
|
||||
my %log_entry = ( parents => \@parents, revision => $rev,
|
||||
log => '');
|
||||
|
||||
my $headrev;
|
||||
|
||||
25
log-tree.c
25
log-tree.c
@@ -179,8 +179,10 @@ void get_patch_filename(struct commit *commit, int nr, const char *suffix,
|
||||
strbuf_addf(buf, commit ? "%04d-" : "%d", nr);
|
||||
if (commit) {
|
||||
int max_len = start_len + FORMAT_PATCH_NAME_MAX - suffix_len;
|
||||
struct pretty_print_context ctx = {0};
|
||||
ctx.date_mode = DATE_NORMAL;
|
||||
|
||||
format_commit_message(commit, "%f", buf, DATE_NORMAL);
|
||||
format_commit_message(commit, "%f", buf, &ctx);
|
||||
if (max_len < buf->len)
|
||||
strbuf_setlen(buf, max_len);
|
||||
strbuf_addstr(buf, suffix);
|
||||
@@ -277,10 +279,9 @@ void show_log(struct rev_info *opt)
|
||||
struct strbuf msgbuf = STRBUF_INIT;
|
||||
struct log_info *log = opt->loginfo;
|
||||
struct commit *commit = log->commit, *parent = log->parent;
|
||||
int abbrev = opt->diffopt.abbrev;
|
||||
int abbrev_commit = opt->abbrev_commit ? opt->abbrev : 40;
|
||||
const char *subject = NULL, *extra_headers = opt->extra_headers;
|
||||
int need_8bit_cte = 0;
|
||||
const char *extra_headers = opt->extra_headers;
|
||||
struct pretty_print_context ctx = {0};
|
||||
|
||||
opt->loginfo = NULL;
|
||||
if (!opt->verbose_header) {
|
||||
@@ -347,8 +348,8 @@ void show_log(struct rev_info *opt)
|
||||
*/
|
||||
|
||||
if (opt->commit_format == CMIT_FMT_EMAIL) {
|
||||
log_write_email_headers(opt, commit, &subject, &extra_headers,
|
||||
&need_8bit_cte);
|
||||
log_write_email_headers(opt, commit, &ctx.subject, &extra_headers,
|
||||
&ctx.need_8bit_cte);
|
||||
} else if (opt->commit_format != CMIT_FMT_USERFORMAT) {
|
||||
fputs(diff_get_color_opt(&opt->diffopt, DIFF_COMMIT), stdout);
|
||||
if (opt->commit_format != CMIT_FMT_ONELINE)
|
||||
@@ -405,11 +406,13 @@ void show_log(struct rev_info *opt)
|
||||
/*
|
||||
* And then the pretty-printed message itself
|
||||
*/
|
||||
if (need_8bit_cte >= 0)
|
||||
need_8bit_cte = has_non_ascii(opt->add_signoff);
|
||||
pretty_print_commit(opt->commit_format, commit, &msgbuf,
|
||||
abbrev, subject, extra_headers, opt->date_mode,
|
||||
need_8bit_cte);
|
||||
if (ctx.need_8bit_cte >= 0)
|
||||
ctx.need_8bit_cte = has_non_ascii(opt->add_signoff);
|
||||
ctx.date_mode = opt->date_mode;
|
||||
ctx.abbrev = opt->diffopt.abbrev;
|
||||
ctx.after_subject = extra_headers;
|
||||
ctx.reflog_info = opt->reflog_info;
|
||||
pretty_print_commit(opt->commit_format, commit, &msgbuf, &ctx);
|
||||
|
||||
if (opt->add_signoff)
|
||||
append_signoff(&msgbuf, opt->add_signoff);
|
||||
|
||||
44
pretty.c
44
pretty.c
@@ -7,6 +7,7 @@
|
||||
#include "mailmap.h"
|
||||
#include "log-tree.h"
|
||||
#include "color.h"
|
||||
#include "reflog-walk.h"
|
||||
|
||||
static char *user_format;
|
||||
|
||||
@@ -442,7 +443,7 @@ struct chunk {
|
||||
|
||||
struct format_commit_context {
|
||||
const struct commit *commit;
|
||||
enum date_mode dmode;
|
||||
const struct pretty_print_context *pretty_ctx;
|
||||
unsigned commit_header_parsed:1;
|
||||
unsigned commit_message_parsed:1;
|
||||
|
||||
@@ -701,6 +702,22 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
|
||||
case 'd':
|
||||
format_decoration(sb, commit);
|
||||
return 1;
|
||||
case 'g': /* reflog info */
|
||||
switch(placeholder[1]) {
|
||||
case 'd': /* reflog selector */
|
||||
case 'D':
|
||||
if (c->pretty_ctx->reflog_info)
|
||||
get_reflog_selector(sb,
|
||||
c->pretty_ctx->reflog_info,
|
||||
c->pretty_ctx->date_mode,
|
||||
(placeholder[1] == 'd'));
|
||||
return 2;
|
||||
case 's': /* reflog message */
|
||||
if (c->pretty_ctx->reflog_info)
|
||||
get_reflog_message(sb, c->pretty_ctx->reflog_info);
|
||||
return 2;
|
||||
}
|
||||
return 0; /* unknown %g placeholder */
|
||||
}
|
||||
|
||||
/* For the rest we have to parse the commit header. */
|
||||
@@ -711,11 +728,11 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
|
||||
case 'a': /* author ... */
|
||||
return format_person_part(sb, placeholder[1],
|
||||
msg + c->author.off, c->author.len,
|
||||
c->dmode);
|
||||
c->pretty_ctx->date_mode);
|
||||
case 'c': /* committer ... */
|
||||
return format_person_part(sb, placeholder[1],
|
||||
msg + c->committer.off, c->committer.len,
|
||||
c->dmode);
|
||||
c->pretty_ctx->date_mode);
|
||||
case 'e': /* encoding */
|
||||
strbuf_add(sb, msg + c->encoding.off, c->encoding.len);
|
||||
return 1;
|
||||
@@ -741,13 +758,13 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
|
||||
|
||||
void format_commit_message(const struct commit *commit,
|
||||
const char *format, struct strbuf *sb,
|
||||
enum date_mode dmode)
|
||||
const struct pretty_print_context *pretty_ctx)
|
||||
{
|
||||
struct format_commit_context context;
|
||||
|
||||
memset(&context, 0, sizeof(context));
|
||||
context.commit = commit;
|
||||
context.dmode = dmode;
|
||||
context.pretty_ctx = pretty_ctx;
|
||||
strbuf_expand(sb, format, format_commit_item, &context);
|
||||
}
|
||||
|
||||
@@ -900,18 +917,18 @@ char *reencode_commit_message(const struct commit *commit, const char **encoding
|
||||
}
|
||||
|
||||
void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
|
||||
struct strbuf *sb, int abbrev,
|
||||
const char *subject, const char *after_subject,
|
||||
enum date_mode dmode, int need_8bit_cte)
|
||||
struct strbuf *sb,
|
||||
const struct pretty_print_context *context)
|
||||
{
|
||||
unsigned long beginning_of_body;
|
||||
int indent = 4;
|
||||
const char *msg = commit->buffer;
|
||||
char *reencoded;
|
||||
const char *encoding;
|
||||
int need_8bit_cte = context->need_8bit_cte;
|
||||
|
||||
if (fmt == CMIT_FMT_USERFORMAT) {
|
||||
format_commit_message(commit, user_format, sb, dmode);
|
||||
format_commit_message(commit, user_format, sb, context);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -946,8 +963,9 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
|
||||
}
|
||||
}
|
||||
|
||||
pp_header(fmt, abbrev, dmode, encoding, commit, &msg, sb);
|
||||
if (fmt != CMIT_FMT_ONELINE && !subject) {
|
||||
pp_header(fmt, context->abbrev, context->date_mode, encoding,
|
||||
commit, &msg, sb);
|
||||
if (fmt != CMIT_FMT_ONELINE && !context->subject) {
|
||||
strbuf_addch(sb, '\n');
|
||||
}
|
||||
|
||||
@@ -956,8 +974,8 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
|
||||
|
||||
/* These formats treat the title line specially. */
|
||||
if (fmt == CMIT_FMT_ONELINE || fmt == CMIT_FMT_EMAIL)
|
||||
pp_title_line(fmt, &msg, sb, subject,
|
||||
after_subject, encoding, need_8bit_cte);
|
||||
pp_title_line(fmt, &msg, sb, context->subject,
|
||||
context->after_subject, encoding, need_8bit_cte);
|
||||
|
||||
beginning_of_body = sb->len;
|
||||
if (fmt != CMIT_FMT_ONELINE)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
struct complete_reflogs {
|
||||
char *ref;
|
||||
const char *short_ref;
|
||||
struct reflog_info {
|
||||
unsigned char osha1[20], nsha1[20];
|
||||
char *email;
|
||||
@@ -241,36 +242,74 @@ void fake_reflog_parent(struct reflog_walk_info *info, struct commit *commit)
|
||||
commit->object.flags &= ~(ADDED | SEEN | SHOWN);
|
||||
}
|
||||
|
||||
void show_reflog_message(struct reflog_walk_info *info, int oneline,
|
||||
void get_reflog_selector(struct strbuf *sb,
|
||||
struct reflog_walk_info *reflog_info,
|
||||
enum date_mode dmode,
|
||||
int shorten)
|
||||
{
|
||||
struct commit_reflog *commit_reflog = reflog_info->last_commit_reflog;
|
||||
struct reflog_info *info;
|
||||
const char *printed_ref;
|
||||
|
||||
if (!commit_reflog)
|
||||
return;
|
||||
|
||||
if (shorten) {
|
||||
if (!commit_reflog->reflogs->short_ref)
|
||||
commit_reflog->reflogs->short_ref
|
||||
= shorten_unambiguous_ref(commit_reflog->reflogs->ref, 0);
|
||||
printed_ref = commit_reflog->reflogs->short_ref;
|
||||
} else {
|
||||
printed_ref = commit_reflog->reflogs->ref;
|
||||
}
|
||||
|
||||
strbuf_addf(sb, "%s@{", printed_ref);
|
||||
if (commit_reflog->flag || dmode) {
|
||||
info = &commit_reflog->reflogs->items[commit_reflog->recno+1];
|
||||
strbuf_addstr(sb, show_date(info->timestamp, info->tz, dmode));
|
||||
} else {
|
||||
strbuf_addf(sb, "%d", commit_reflog->reflogs->nr
|
||||
- 2 - commit_reflog->recno);
|
||||
}
|
||||
|
||||
strbuf_addch(sb, '}');
|
||||
}
|
||||
|
||||
void get_reflog_message(struct strbuf *sb,
|
||||
struct reflog_walk_info *reflog_info)
|
||||
{
|
||||
struct commit_reflog *commit_reflog = reflog_info->last_commit_reflog;
|
||||
struct reflog_info *info;
|
||||
size_t len;
|
||||
|
||||
if (!commit_reflog)
|
||||
return;
|
||||
|
||||
info = &commit_reflog->reflogs->items[commit_reflog->recno+1];
|
||||
len = strlen(info->message);
|
||||
if (len > 0)
|
||||
len--; /* strip away trailing newline */
|
||||
strbuf_add(sb, info->message, len);
|
||||
}
|
||||
|
||||
void show_reflog_message(struct reflog_walk_info *reflog_info, int oneline,
|
||||
enum date_mode dmode)
|
||||
{
|
||||
if (info && info->last_commit_reflog) {
|
||||
struct commit_reflog *commit_reflog = info->last_commit_reflog;
|
||||
if (reflog_info && reflog_info->last_commit_reflog) {
|
||||
struct commit_reflog *commit_reflog = reflog_info->last_commit_reflog;
|
||||
struct reflog_info *info;
|
||||
struct strbuf selector = STRBUF_INIT;
|
||||
|
||||
info = &commit_reflog->reflogs->items[commit_reflog->recno+1];
|
||||
get_reflog_selector(&selector, reflog_info, dmode, 0);
|
||||
if (oneline) {
|
||||
printf("%s@{", commit_reflog->reflogs->ref);
|
||||
if (commit_reflog->flag || dmode)
|
||||
printf("%s", show_date(info->timestamp,
|
||||
info->tz,
|
||||
dmode));
|
||||
else
|
||||
printf("%d", commit_reflog->reflogs->nr
|
||||
- 2 - commit_reflog->recno);
|
||||
printf("}: %s", info->message);
|
||||
printf("%s: %s", selector.buf, info->message);
|
||||
}
|
||||
else {
|
||||
printf("Reflog: %s@{", commit_reflog->reflogs->ref);
|
||||
if (commit_reflog->flag || dmode)
|
||||
printf("%s", show_date(info->timestamp,
|
||||
info->tz,
|
||||
dmode));
|
||||
else
|
||||
printf("%d", commit_reflog->reflogs->nr
|
||||
- 2 - commit_reflog->recno);
|
||||
printf("} (%s)\nReflog message: %s",
|
||||
info->email, info->message);
|
||||
printf("Reflog: %s (%s)\nReflog message: %s",
|
||||
selector.buf, info->email, info->message);
|
||||
}
|
||||
|
||||
strbuf_release(&selector);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
#include "cache.h"
|
||||
|
||||
struct reflog_walk_info;
|
||||
|
||||
extern void init_reflog_walk(struct reflog_walk_info** info);
|
||||
extern int add_reflog_for_walk(struct reflog_walk_info *info,
|
||||
struct commit *commit, const char *name);
|
||||
@@ -10,5 +12,11 @@ extern void fake_reflog_parent(struct reflog_walk_info *info,
|
||||
struct commit *commit);
|
||||
extern void show_reflog_message(struct reflog_walk_info *info, int,
|
||||
enum date_mode);
|
||||
extern void get_reflog_message(struct strbuf *sb,
|
||||
struct reflog_walk_info *reflog_info);
|
||||
extern void get_reflog_selector(struct strbuf *sb,
|
||||
struct reflog_walk_info *reflog_info,
|
||||
enum date_mode dmode,
|
||||
int shorten);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -82,9 +82,10 @@ int main(int argc, const char **argv)
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
const char *url;
|
||||
struct walker *walker = NULL;
|
||||
int nongit;
|
||||
|
||||
git_extract_argv0_path(argv[0]);
|
||||
setup_git_directory();
|
||||
setup_git_directory_gently(&nongit);
|
||||
if (argc < 2) {
|
||||
fprintf(stderr, "Remote needed\n");
|
||||
return 1;
|
||||
@@ -103,6 +104,8 @@ int main(int argc, const char **argv)
|
||||
break;
|
||||
if (!prefixcmp(buf.buf, "fetch ")) {
|
||||
char *obj = buf.buf + strlen("fetch ");
|
||||
if (nongit)
|
||||
die("Fetch attempted without a local repo");
|
||||
if (!walker)
|
||||
walker = get_http_walker(url, remote);
|
||||
walker->get_all = 1;
|
||||
|
||||
38
setup.c
38
setup.c
@@ -61,6 +61,19 @@ const char *prefix_filename(const char *pfx, int pfx_len, const char *arg)
|
||||
return path;
|
||||
}
|
||||
|
||||
int check_filename(const char *prefix, const char *arg)
|
||||
{
|
||||
const char *name;
|
||||
struct stat st;
|
||||
|
||||
name = prefix ? prefix_filename(prefix, strlen(prefix), arg) : arg;
|
||||
if (!lstat(name, &st))
|
||||
return 1; /* file exists */
|
||||
if (errno == ENOENT || errno == ENOTDIR)
|
||||
return 0; /* file does not exist */
|
||||
die_errno("failed to stat '%s'", arg);
|
||||
}
|
||||
|
||||
/*
|
||||
* Verify a filename that we got as an argument for a pathspec
|
||||
* entry. Note that a filename that begins with "-" never verifies
|
||||
@@ -70,18 +83,12 @@ const char *prefix_filename(const char *pfx, int pfx_len, const char *arg)
|
||||
*/
|
||||
void verify_filename(const char *prefix, const char *arg)
|
||||
{
|
||||
const char *name;
|
||||
struct stat st;
|
||||
|
||||
if (*arg == '-')
|
||||
die("bad flag '%s' used after filename", arg);
|
||||
name = prefix ? prefix_filename(prefix, strlen(prefix), arg) : arg;
|
||||
if (!lstat(name, &st))
|
||||
if (check_filename(prefix, arg))
|
||||
return;
|
||||
if (errno == ENOENT)
|
||||
die("ambiguous argument '%s': unknown revision or path not in the working tree.\n"
|
||||
"Use '--' to separate paths from revisions", arg);
|
||||
die_errno("failed to stat '%s'", arg);
|
||||
die("ambiguous argument '%s': unknown revision or path not in the working tree.\n"
|
||||
"Use '--' to separate paths from revisions", arg);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -91,19 +98,14 @@ void verify_filename(const char *prefix, const char *arg)
|
||||
*/
|
||||
void verify_non_filename(const char *prefix, const char *arg)
|
||||
{
|
||||
const char *name;
|
||||
struct stat st;
|
||||
|
||||
if (!is_inside_work_tree() || is_inside_git_dir())
|
||||
return;
|
||||
if (*arg == '-')
|
||||
return; /* flag */
|
||||
name = prefix ? prefix_filename(prefix, strlen(prefix), arg) : arg;
|
||||
if (!lstat(name, &st))
|
||||
die("ambiguous argument '%s': both revision and filename\n"
|
||||
"Use '--' to separate filenames from revisions", arg);
|
||||
if (errno != ENOENT && errno != ENOTDIR)
|
||||
die_errno("failed to stat '%s'", arg);
|
||||
if (!check_filename(prefix, arg))
|
||||
return;
|
||||
die("ambiguous argument '%s': both revision and filename\n"
|
||||
"Use '--' to separate filenames from revisions", arg);
|
||||
}
|
||||
|
||||
const char **get_pathspec(const char *prefix, const char **pathspec)
|
||||
|
||||
114
submodule.c
Normal file
114
submodule.c
Normal file
@@ -0,0 +1,114 @@
|
||||
#include "cache.h"
|
||||
#include "submodule.h"
|
||||
#include "dir.h"
|
||||
#include "diff.h"
|
||||
#include "commit.h"
|
||||
#include "revision.h"
|
||||
|
||||
int add_submodule_odb(const char *path)
|
||||
{
|
||||
struct strbuf objects_directory = STRBUF_INIT;
|
||||
struct alternate_object_database *alt_odb;
|
||||
|
||||
strbuf_addf(&objects_directory, "%s/.git/objects/", path);
|
||||
if (!is_directory(objects_directory.buf))
|
||||
return -1;
|
||||
|
||||
/* avoid adding it twice */
|
||||
for (alt_odb = alt_odb_list; alt_odb; alt_odb = alt_odb->next)
|
||||
if (alt_odb->name - alt_odb->base == objects_directory.len &&
|
||||
!strncmp(alt_odb->base, objects_directory.buf,
|
||||
objects_directory.len))
|
||||
return 0;
|
||||
|
||||
alt_odb = xmalloc(objects_directory.len + 42 + sizeof(*alt_odb));
|
||||
alt_odb->next = alt_odb_list;
|
||||
strcpy(alt_odb->base, objects_directory.buf);
|
||||
alt_odb->name = alt_odb->base + objects_directory.len;
|
||||
alt_odb->name[2] = '/';
|
||||
alt_odb->name[40] = '\0';
|
||||
alt_odb->name[41] = '\0';
|
||||
alt_odb_list = alt_odb;
|
||||
prepare_alt_odb();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void show_submodule_summary(FILE *f, const char *path,
|
||||
unsigned char one[20], unsigned char two[20],
|
||||
const char *del, const char *add, const char *reset)
|
||||
{
|
||||
struct rev_info rev;
|
||||
struct commit *commit, *left = left, *right;
|
||||
struct commit_list *merge_bases, *list;
|
||||
const char *message = NULL;
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
static const char *format = " %m %s";
|
||||
int fast_forward = 0, fast_backward = 0;
|
||||
|
||||
if (is_null_sha1(two))
|
||||
message = "(submodule deleted)";
|
||||
else if (add_submodule_odb(path))
|
||||
message = "(not checked out)";
|
||||
else if (is_null_sha1(one))
|
||||
message = "(new submodule)";
|
||||
else if (!(left = lookup_commit_reference(one)) ||
|
||||
!(right = lookup_commit_reference(two)))
|
||||
message = "(commits not present)";
|
||||
|
||||
if (!message) {
|
||||
init_revisions(&rev, NULL);
|
||||
setup_revisions(0, NULL, &rev, NULL);
|
||||
rev.left_right = 1;
|
||||
rev.first_parent_only = 1;
|
||||
left->object.flags |= SYMMETRIC_LEFT;
|
||||
add_pending_object(&rev, &left->object, path);
|
||||
add_pending_object(&rev, &right->object, path);
|
||||
merge_bases = get_merge_bases(left, right, 1);
|
||||
if (merge_bases) {
|
||||
if (merge_bases->item == left)
|
||||
fast_forward = 1;
|
||||
else if (merge_bases->item == right)
|
||||
fast_backward = 1;
|
||||
}
|
||||
for (list = merge_bases; list; list = list->next) {
|
||||
list->item->object.flags |= UNINTERESTING;
|
||||
add_pending_object(&rev, &list->item->object,
|
||||
sha1_to_hex(list->item->object.sha1));
|
||||
}
|
||||
if (prepare_revision_walk(&rev))
|
||||
message = "(revision walker failed)";
|
||||
}
|
||||
|
||||
strbuf_addf(&sb, "Submodule %s %s..", path,
|
||||
find_unique_abbrev(one, DEFAULT_ABBREV));
|
||||
if (!fast_backward && !fast_forward)
|
||||
strbuf_addch(&sb, '.');
|
||||
strbuf_addf(&sb, "%s", find_unique_abbrev(two, DEFAULT_ABBREV));
|
||||
if (message)
|
||||
strbuf_addf(&sb, " %s\n", message);
|
||||
else
|
||||
strbuf_addf(&sb, "%s:\n", fast_backward ? " (rewind)" : "");
|
||||
fwrite(sb.buf, sb.len, 1, f);
|
||||
|
||||
if (!message) {
|
||||
while ((commit = get_revision(&rev))) {
|
||||
struct pretty_print_context ctx = {0};
|
||||
ctx.date_mode = rev.date_mode;
|
||||
strbuf_setlen(&sb, 0);
|
||||
if (commit->object.flags & SYMMETRIC_LEFT) {
|
||||
if (del)
|
||||
strbuf_addstr(&sb, del);
|
||||
}
|
||||
else if (add)
|
||||
strbuf_addstr(&sb, add);
|
||||
format_commit_message(commit, format, &sb, &ctx);
|
||||
if (reset)
|
||||
strbuf_addstr(&sb, reset);
|
||||
strbuf_addch(&sb, '\n');
|
||||
fprintf(f, "%s", sb.buf);
|
||||
}
|
||||
clear_commit_marks(left, ~0);
|
||||
clear_commit_marks(right, ~0);
|
||||
}
|
||||
strbuf_release(&sb);
|
||||
}
|
||||
8
submodule.h
Normal file
8
submodule.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#ifndef SUBMODULE_H
|
||||
#define SUBMODULE_H
|
||||
|
||||
void show_submodule_summary(FILE *f, const char *path,
|
||||
unsigned char one[20], unsigned char two[20],
|
||||
const char *del, const char *add, const char *reset);
|
||||
|
||||
#endif
|
||||
@@ -16,6 +16,7 @@ fi
|
||||
GIT_DIR=$PWD/.git
|
||||
GIT_SVN_DIR=$GIT_DIR/svn/refs/remotes/git-svn
|
||||
SVN_TREE=$GIT_SVN_DIR/svn-tree
|
||||
PERL=${PERL:-perl}
|
||||
|
||||
svn >/dev/null 2>&1
|
||||
if test $? -ne 1
|
||||
@@ -29,7 +30,7 @@ export svnrepo
|
||||
svnconf=$PWD/svnconf
|
||||
export svnconf
|
||||
|
||||
perl -w -e "
|
||||
$PERL -w -e "
|
||||
use SVN::Core;
|
||||
use SVN::Repos;
|
||||
\$SVN::Core::VERSION gt '1.1.0' or exit(42);
|
||||
@@ -130,7 +131,7 @@ stop_httpd () {
|
||||
}
|
||||
|
||||
convert_to_rev_db () {
|
||||
perl -w -- - "$@" <<\EOF
|
||||
$PERL -w -- - "$@" <<\EOF
|
||||
use strict;
|
||||
@ARGV == 2 or die "Usage: convert_to_rev_db <input> <output>";
|
||||
open my $wr, '+>', $ARGV[1] or die "$!: couldn't open: $ARGV[1]";
|
||||
|
||||
61
t/t1402-check-ref-format.sh
Executable file
61
t/t1402-check-ref-format.sh
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='Test git check-ref-format'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
valid_ref() {
|
||||
test_expect_success "ref name '$1' is valid" \
|
||||
"git check-ref-format '$1'"
|
||||
}
|
||||
invalid_ref() {
|
||||
test_expect_success "ref name '$1' is not valid" \
|
||||
"test_must_fail git check-ref-format '$1'"
|
||||
}
|
||||
|
||||
valid_ref 'heads/foo'
|
||||
invalid_ref 'foo'
|
||||
valid_ref 'foo/bar/baz'
|
||||
valid_ref 'refs///heads/foo'
|
||||
invalid_ref 'heads/foo/'
|
||||
invalid_ref './foo'
|
||||
invalid_ref '.refs/foo'
|
||||
invalid_ref 'heads/foo..bar'
|
||||
invalid_ref 'heads/foo?bar'
|
||||
valid_ref 'foo./bar'
|
||||
invalid_ref 'heads/foo.lock'
|
||||
valid_ref 'heads/foo@bar'
|
||||
invalid_ref 'heads/v@{ation'
|
||||
invalid_ref 'heads/foo\bar'
|
||||
|
||||
test_expect_success "check-ref-format --branch @{-1}" '
|
||||
T=$(git write-tree) &&
|
||||
sha1=$(echo A | git commit-tree $T) &&
|
||||
git update-ref refs/heads/master $sha1 &&
|
||||
git update-ref refs/remotes/origin/master $sha1
|
||||
git checkout master &&
|
||||
git checkout origin/master &&
|
||||
git checkout master &&
|
||||
refname=$(git check-ref-format --branch @{-1}) &&
|
||||
test "$refname" = "$sha1" &&
|
||||
refname2=$(git check-ref-format --branch @{-2}) &&
|
||||
test "$refname2" = master'
|
||||
|
||||
valid_ref_normalized() {
|
||||
test_expect_success "ref name '$1' simplifies to '$2'" "
|
||||
refname=\$(git check-ref-format --print '$1') &&
|
||||
test \"\$refname\" = '$2'"
|
||||
}
|
||||
invalid_ref_normalized() {
|
||||
test_expect_success "check-ref-format --print rejects '$1'" "
|
||||
test_must_fail git check-ref-format --print '$1'"
|
||||
}
|
||||
|
||||
valid_ref_normalized 'heads/foo' 'heads/foo'
|
||||
valid_ref_normalized 'refs///heads/foo' 'refs/heads/foo'
|
||||
invalid_ref_normalized 'foo'
|
||||
invalid_ref_normalized 'heads/foo/../bar'
|
||||
invalid_ref_normalized 'heads/./foo'
|
||||
invalid_ref_normalized 'heads\foo'
|
||||
|
||||
test_done
|
||||
260
t/t4041-diff-submodule.sh
Executable file
260
t/t4041-diff-submodule.sh
Executable file
@@ -0,0 +1,260 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2009 Jens Lehmann, based on t7401 by Ping Yin
|
||||
#
|
||||
|
||||
test_description='Support for verbose submodule differences in git diff
|
||||
|
||||
This test tries to verify the sanity of the --submodule option of git diff.
|
||||
'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
add_file () {
|
||||
sm=$1
|
||||
shift
|
||||
owd=$(pwd)
|
||||
cd "$sm"
|
||||
for name; do
|
||||
echo "$name" > "$name" &&
|
||||
git add "$name" &&
|
||||
test_tick &&
|
||||
git commit -m "Add $name"
|
||||
done >/dev/null
|
||||
git rev-parse --verify HEAD | cut -c1-7
|
||||
cd "$owd"
|
||||
}
|
||||
commit_file () {
|
||||
test_tick &&
|
||||
git commit "$@" -m "Commit $*" >/dev/null
|
||||
}
|
||||
|
||||
test_create_repo sm1 &&
|
||||
add_file . foo >/dev/null
|
||||
|
||||
head1=$(add_file sm1 foo1 foo2)
|
||||
|
||||
test_expect_success 'added submodule' "
|
||||
git add sm1 &&
|
||||
git diff-index -p --submodule=log HEAD >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 0000000...$head1 (new submodule)
|
||||
EOF
|
||||
"
|
||||
|
||||
commit_file sm1 &&
|
||||
head2=$(add_file sm1 foo3)
|
||||
|
||||
test_expect_success 'modified submodule(forward)' "
|
||||
git diff-index -p --submodule=log HEAD >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 $head1..$head2:
|
||||
> Add foo3
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success 'modified submodule(forward)' "
|
||||
git diff --submodule=log >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 $head1..$head2:
|
||||
> Add foo3
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success 'modified submodule(forward) --submodule' "
|
||||
git diff --submodule >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 $head1..$head2:
|
||||
> Add foo3
|
||||
EOF
|
||||
"
|
||||
|
||||
fullhead1=$(cd sm1; git rev-list --max-count=1 $head1)
|
||||
fullhead2=$(cd sm1; git rev-list --max-count=1 $head2)
|
||||
test_expect_success 'modified submodule(forward) --submodule=short' "
|
||||
git diff --submodule=short >actual &&
|
||||
diff actual - <<-EOF
|
||||
diff --git a/sm1 b/sm1
|
||||
index $head1..$head2 160000
|
||||
--- a/sm1
|
||||
+++ b/sm1
|
||||
@@ -1 +1 @@
|
||||
-Subproject commit $fullhead1
|
||||
+Subproject commit $fullhead2
|
||||
EOF
|
||||
"
|
||||
|
||||
commit_file sm1 &&
|
||||
cd sm1 &&
|
||||
git reset --hard HEAD~2 >/dev/null &&
|
||||
head3=$(git rev-parse --verify HEAD | cut -c1-7) &&
|
||||
cd ..
|
||||
|
||||
test_expect_success 'modified submodule(backward)' "
|
||||
git diff-index -p --submodule=log HEAD >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 $head2..$head3 (rewind):
|
||||
< Add foo3
|
||||
< Add foo2
|
||||
EOF
|
||||
"
|
||||
|
||||
head4=$(add_file sm1 foo4 foo5) &&
|
||||
head4_full=$(GIT_DIR=sm1/.git git rev-parse --verify HEAD)
|
||||
test_expect_success 'modified submodule(backward and forward)' "
|
||||
git diff-index -p --submodule=log HEAD >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 $head2...$head4:
|
||||
> Add foo5
|
||||
> Add foo4
|
||||
< Add foo3
|
||||
< Add foo2
|
||||
EOF
|
||||
"
|
||||
|
||||
commit_file sm1 &&
|
||||
mv sm1 sm1-bak &&
|
||||
echo sm1 >sm1 &&
|
||||
head5=$(git hash-object sm1 | cut -c1-7) &&
|
||||
git add sm1 &&
|
||||
rm -f sm1 &&
|
||||
mv sm1-bak sm1
|
||||
|
||||
test_expect_success 'typechanged submodule(submodule->blob), --cached' "
|
||||
git diff --submodule=log --cached >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 41fbea9...0000000 (submodule deleted)
|
||||
diff --git a/sm1 b/sm1
|
||||
new file mode 100644
|
||||
index 0000000..9da5fb8
|
||||
--- /dev/null
|
||||
+++ b/sm1
|
||||
@@ -0,0 +1 @@
|
||||
+sm1
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success 'typechanged submodule(submodule->blob)' "
|
||||
git diff --submodule=log >actual &&
|
||||
diff actual - <<-EOF
|
||||
diff --git a/sm1 b/sm1
|
||||
deleted file mode 100644
|
||||
index 9da5fb8..0000000
|
||||
--- a/sm1
|
||||
+++ /dev/null
|
||||
@@ -1 +0,0 @@
|
||||
-sm1
|
||||
Submodule sm1 0000000...$head4 (new submodule)
|
||||
EOF
|
||||
"
|
||||
|
||||
rm -rf sm1 &&
|
||||
git checkout-index sm1
|
||||
test_expect_success 'typechanged submodule(submodule->blob)' "
|
||||
git diff-index -p --submodule=log HEAD >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 $head4...0000000 (submodule deleted)
|
||||
diff --git a/sm1 b/sm1
|
||||
new file mode 100644
|
||||
index 0000000..$head5
|
||||
--- /dev/null
|
||||
+++ b/sm1
|
||||
@@ -0,0 +1 @@
|
||||
+sm1
|
||||
EOF
|
||||
"
|
||||
|
||||
rm -f sm1 &&
|
||||
test_create_repo sm1 &&
|
||||
head6=$(add_file sm1 foo6 foo7)
|
||||
fullhead6=$(cd sm1; git rev-list --max-count=1 $head6)
|
||||
test_expect_success 'nonexistent commit' "
|
||||
git diff-index -p --submodule=log HEAD >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 $head4...$head6 (commits not present)
|
||||
EOF
|
||||
"
|
||||
|
||||
commit_file
|
||||
test_expect_success 'typechanged submodule(blob->submodule)' "
|
||||
git diff-index -p --submodule=log HEAD >actual &&
|
||||
diff actual - <<-EOF
|
||||
diff --git a/sm1 b/sm1
|
||||
deleted file mode 100644
|
||||
index $head5..0000000
|
||||
--- a/sm1
|
||||
+++ /dev/null
|
||||
@@ -1 +0,0 @@
|
||||
-sm1
|
||||
Submodule sm1 0000000...$head6 (new submodule)
|
||||
EOF
|
||||
"
|
||||
|
||||
commit_file sm1 &&
|
||||
rm -rf sm1
|
||||
test_expect_success 'deleted submodule' "
|
||||
git diff-index -p --submodule=log HEAD >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 $head6...0000000 (submodule deleted)
|
||||
EOF
|
||||
"
|
||||
|
||||
test_create_repo sm2 &&
|
||||
head7=$(add_file sm2 foo8 foo9) &&
|
||||
git add sm2
|
||||
|
||||
test_expect_success 'multiple submodules' "
|
||||
git diff-index -p --submodule=log HEAD >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 $head6...0000000 (submodule deleted)
|
||||
Submodule sm2 0000000...$head7 (new submodule)
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success 'path filter' "
|
||||
git diff-index -p --submodule=log HEAD sm2 >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm2 0000000...$head7 (new submodule)
|
||||
EOF
|
||||
"
|
||||
|
||||
commit_file sm2
|
||||
test_expect_success 'given commit' "
|
||||
git diff-index -p --submodule=log HEAD^ >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 $head6...0000000 (submodule deleted)
|
||||
Submodule sm2 0000000...$head7 (new submodule)
|
||||
EOF
|
||||
"
|
||||
|
||||
test_expect_success 'given commit --submodule' "
|
||||
git diff-index -p --submodule HEAD^ >actual &&
|
||||
diff actual - <<-EOF
|
||||
Submodule sm1 $head6...0000000 (submodule deleted)
|
||||
Submodule sm2 0000000...$head7 (new submodule)
|
||||
EOF
|
||||
"
|
||||
|
||||
fullhead7=$(cd sm2; git rev-list --max-count=1 $head7)
|
||||
|
||||
test_expect_success 'given commit --submodule=short' "
|
||||
git diff-index -p --submodule=short HEAD^ >actual &&
|
||||
diff actual - <<-EOF
|
||||
diff --git a/sm1 b/sm1
|
||||
deleted file mode 160000
|
||||
index $head6..0000000
|
||||
--- a/sm1
|
||||
+++ /dev/null
|
||||
@@ -1 +0,0 @@
|
||||
-Subproject commit $fullhead6
|
||||
diff --git a/sm2 b/sm2
|
||||
new file mode 160000
|
||||
index 0000000..$head7
|
||||
--- /dev/null
|
||||
+++ b/sm2
|
||||
@@ -0,0 +1 @@
|
||||
+Subproject commit $fullhead7
|
||||
EOF
|
||||
"
|
||||
|
||||
test_done
|
||||
@@ -162,4 +162,22 @@ test_expect_success 'empty email' '
|
||||
}
|
||||
'
|
||||
|
||||
test_expect_success '"%h %gD: %gs" is same as git-reflog' '
|
||||
git reflog >expect &&
|
||||
git log -g --format="%h %gD: %gs" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '"%h %gD: %gs" is same as git-reflog (with date)' '
|
||||
git reflog --date=raw >expect &&
|
||||
git log -g --format="%h %gD: %gs" --date=raw >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success '%gd shortens ref name' '
|
||||
echo "master@{0}" >expect.gd-short &&
|
||||
git log -g -1 --format=%gd refs/heads/master >actual.gd-short &&
|
||||
test_cmp expect.gd-short actual.gd-short
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -247,6 +247,47 @@ $existing" &&
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'signoff gap' '
|
||||
|
||||
echo 3 >positive &&
|
||||
git add positive &&
|
||||
alt="Alt-RFC-822-Header: Value" &&
|
||||
git commit -s -m "welcome
|
||||
|
||||
$alt" &&
|
||||
git cat-file commit HEAD | sed -e "1,/^\$/d" > actual &&
|
||||
(
|
||||
echo welcome
|
||||
echo
|
||||
echo $alt
|
||||
git var GIT_COMMITTER_IDENT |
|
||||
sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"
|
||||
) >expected &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_expect_success 'signoff gap 2' '
|
||||
|
||||
echo 4 >positive &&
|
||||
git add positive &&
|
||||
alt="fixed: 34" &&
|
||||
git commit -s -m "welcome
|
||||
|
||||
We have now
|
||||
$alt" &&
|
||||
git cat-file commit HEAD | sed -e "1,/^\$/d" > actual &&
|
||||
(
|
||||
echo welcome
|
||||
echo
|
||||
echo We have now
|
||||
echo $alt
|
||||
echo
|
||||
git var GIT_COMMITTER_IDENT |
|
||||
sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /"
|
||||
) >expected &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_expect_success 'multiple -m' '
|
||||
|
||||
>negative &&
|
||||
|
||||
24
t/t9150-svk-mergetickets.sh
Executable file
24
t/t9150-svk-mergetickets.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2007 Sam Vilain
|
||||
#
|
||||
|
||||
test_description='git-svn svk merge tickets'
|
||||
|
||||
. ./lib-git-svn.sh
|
||||
|
||||
test_expect_success 'load svk depot' "
|
||||
svnadmin load -q '$rawsvnrepo' \
|
||||
< '$TEST_DIRECTORY/t9150/svk-merge.dump' &&
|
||||
git svn init --minimize-url -R svkmerge \
|
||||
-T trunk -b branches '$svnrepo' &&
|
||||
git svn fetch --all
|
||||
"
|
||||
|
||||
uuid=b48289b2-9c08-4d72-af37-0358a40b9c15
|
||||
|
||||
test_expect_success 'svk merges were represented coming in' "
|
||||
[ `git-cat-file commit HEAD | grep parent | wc -l` -eq 2 ]
|
||||
"
|
||||
|
||||
test_done
|
||||
57
t/t9150/make-svk-dump
Normal file
57
t/t9150/make-svk-dump
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# this script sets up a Subversion repository for Makefile in the
|
||||
# first ever git merge, as if it were done with svk.
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
svk depotmap foo ~/.svk/foo
|
||||
svk co /foo/ foo
|
||||
cd foo
|
||||
mkdir trunk
|
||||
mkdir branches
|
||||
svk add trunk branches
|
||||
svk commit -m "Setup trunk and branches"
|
||||
cd trunk
|
||||
|
||||
git cat-file blob 6683463e:Makefile > Makefile
|
||||
svk add Makefile
|
||||
|
||||
svk commit -m "ancestor"
|
||||
cd ..
|
||||
svk cp trunk branches/left
|
||||
|
||||
svk commit -m "make left branch"
|
||||
cd branches/left/
|
||||
|
||||
git cat-file blob 5873b67e:Makefile > Makefile
|
||||
svk commit -m "left update 1"
|
||||
|
||||
cd ../../trunk
|
||||
git cat-file blob 75118b13:Makefile > Makefile
|
||||
svk commit -m "trunk update"
|
||||
|
||||
cd ../branches/left
|
||||
git cat-file blob b5039db6:Makefile > Makefile
|
||||
svk commit -m "left update 2"
|
||||
|
||||
cd ../../trunk
|
||||
svk sm /foo/branches/left
|
||||
# in theory we could delete the "left" branch here, but it's not
|
||||
# required so don't do it, in case people start getting ideas ;)
|
||||
svk commit -m "merge branch 'left' into 'trunk'"
|
||||
|
||||
git cat-file blob b51ad431:Makefile > Makefile
|
||||
|
||||
svk diff Makefile && echo "Hey! No differences, magic"
|
||||
|
||||
cd ../..
|
||||
|
||||
svnadmin dump ~/.svk/foo > svk-merge.dump
|
||||
|
||||
svk co -d foo
|
||||
rm -rf foo
|
||||
svk depotmap -d /foo/
|
||||
rm -rf ~/.svk/foo
|
||||
|
||||
616
t/t9150/svk-merge.dump
Normal file
616
t/t9150/svk-merge.dump
Normal file
@@ -0,0 +1,616 @@
|
||||
SVN-fs-dump-format-version: 2
|
||||
|
||||
UUID: b48289b2-9c08-4d72-af37-0358a40b9c15
|
||||
|
||||
Revision-number: 0
|
||||
Prop-content-length: 56
|
||||
Content-length: 56
|
||||
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-19T23:44:03.722969Z
|
||||
PROPS-END
|
||||
|
||||
Revision-number: 1
|
||||
Prop-content-length: 123
|
||||
Content-length: 123
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 24
|
||||
Setup trunk and branches
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-19T23:44:04.927533Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches
|
||||
Node-kind: dir
|
||||
Node-action: add
|
||||
Prop-content-length: 10
|
||||
Content-length: 10
|
||||
|
||||
PROPS-END
|
||||
|
||||
|
||||
Node-path: trunk
|
||||
Node-kind: dir
|
||||
Node-action: add
|
||||
Prop-content-length: 10
|
||||
Content-length: 10
|
||||
|
||||
PROPS-END
|
||||
|
||||
|
||||
Revision-number: 2
|
||||
Prop-content-length: 106
|
||||
Content-length: 106
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 8
|
||||
ancestor
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-19T23:44:05.835585Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: trunk/Makefile
|
||||
Node-kind: file
|
||||
Node-action: add
|
||||
Prop-content-length: 10
|
||||
Text-content-length: 2401
|
||||
Text-content-md5: bfd8ff778d1492dc6758567373176a89
|
||||
Content-length: 2411
|
||||
|
||||
PROPS-END
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 3
|
||||
Prop-content-length: 115
|
||||
Content-length: 115
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 16
|
||||
make left branch
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-19T23:44:06.719737Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left
|
||||
Node-kind: dir
|
||||
Node-action: add
|
||||
Node-copyfrom-rev: 2
|
||||
Node-copyfrom-path: trunk
|
||||
|
||||
|
||||
Revision-number: 4
|
||||
Prop-content-length: 112
|
||||
Content-length: 112
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 13
|
||||
left update 1
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-19T23:44:07.167666Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left/Makefile
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2465
|
||||
Text-content-md5: 16e38d9753b061731650561ce01b1195
|
||||
Content-length: 2465
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 5
|
||||
Prop-content-length: 111
|
||||
Content-length: 111
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 12
|
||||
trunk update
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-19T23:44:07.619633Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: trunk/Makefile
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2521
|
||||
Text-content-md5: 0668418a621333f4aa8b6632cd63e2a0
|
||||
Content-length: 2521
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base merge-cache
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o $(LIBS)
|
||||
|
||||
merge-cache: merge-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-cache merge-cache.o read-cache.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 6
|
||||
Prop-content-length: 112
|
||||
Content-length: 112
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 13
|
||||
left update 2
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-19T23:44:08.067554Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left/Makefile
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2593
|
||||
Text-content-md5: 5ccff689fb290e00b85fe18ee50c54ba
|
||||
Content-length: 2593
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 7
|
||||
Prop-content-length: 131
|
||||
Content-length: 131
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 32
|
||||
merge branch 'left' into 'trunk'
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-19T23:44:08.971801Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: trunk
|
||||
Node-kind: dir
|
||||
Node-action: change
|
||||
Prop-content-length: 83
|
||||
Content-length: 83
|
||||
|
||||
K 9
|
||||
svk:merge
|
||||
V 53
|
||||
b48289b2-9c08-4d72-af37-0358a40b9c15:/branches/left:6
|
||||
PROPS-END
|
||||
|
||||
|
||||
Node-path: trunk/Makefile
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2713
|
||||
Text-content-md5: 0afbe34f244cd662b1f97d708c687f90
|
||||
Content-length: 2713
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base merge-cache
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
merge-cache: merge-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-cache merge-cache.o read-cache.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
22
t/t9151-svn-mergeinfo.sh
Executable file
22
t/t9151-svn-mergeinfo.sh
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2007, 2009 Sam Vilain
|
||||
#
|
||||
|
||||
test_description='git-svn svn mergeinfo properties'
|
||||
|
||||
. ./lib-git-svn.sh
|
||||
|
||||
test_expect_success 'load svn dump' "
|
||||
svnadmin load -q '$rawsvnrepo' \
|
||||
< '$TEST_DIRECTORY/t9151/svn-mergeinfo.dump' &&
|
||||
git svn init --minimize-url -R svnmerge \
|
||||
-T trunk -b branches '$svnrepo' &&
|
||||
git svn fetch --all
|
||||
"
|
||||
|
||||
test_expect_success 'svn merges were represented coming in' "
|
||||
[ `git cat-file commit HEAD | grep parent | wc -l` -eq 2 ]
|
||||
"
|
||||
|
||||
test_done
|
||||
2
t/t9151/.gitignore
vendored
Normal file
2
t/t9151/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
foo
|
||||
foo.svn
|
||||
73
t/t9151/make-svnmerge-dump
Normal file
73
t/t9151/make-svnmerge-dump
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# this script sets up a Subversion repository for Makefile in the
|
||||
# first ever git merge, as if it were done with svnmerge (SVN 1.5+)
|
||||
#
|
||||
|
||||
rm -rf foo.svn foo
|
||||
set -e
|
||||
|
||||
mkdir foo.svn
|
||||
svnadmin create foo.svn
|
||||
svn co file://`pwd`/foo.svn foo
|
||||
|
||||
cd foo
|
||||
mkdir trunk
|
||||
mkdir branches
|
||||
svn add trunk branches
|
||||
svn commit -m "Setup trunk and branches"
|
||||
cd trunk
|
||||
|
||||
git cat-file blob 6683463e:Makefile > Makefile
|
||||
svn add Makefile
|
||||
|
||||
echo "Committing ANCESTOR"
|
||||
svn commit -m "ancestor"
|
||||
cd ..
|
||||
svn cp trunk branches/left
|
||||
|
||||
echo "Committing BRANCH POINT"
|
||||
svn commit -m "make left branch"
|
||||
cd branches/left/
|
||||
|
||||
#$sm init
|
||||
#svn commit -m "init svnmerge"
|
||||
|
||||
git cat-file blob 5873b67e:Makefile > Makefile
|
||||
echo "Committing BRANCH UPDATE 1"
|
||||
svn commit -m "left update 1"
|
||||
cd ../..
|
||||
|
||||
cd trunk
|
||||
git cat-file blob 75118b13:Makefile > Makefile
|
||||
echo "Committing TRUNK UPDATE"
|
||||
svn commit -m "trunk update"
|
||||
|
||||
cd ../branches/left
|
||||
git cat-file blob ff5ebe39:Makefile > Makefile
|
||||
echo "Committing BRANCH UPDATE 2"
|
||||
svn commit -m "left update 2"
|
||||
|
||||
git cat-file blob b5039db6:Makefile > Makefile
|
||||
echo "Committing BRANCH UPDATE 3"
|
||||
svn commit -m "left update 3"
|
||||
|
||||
# merge to trunk
|
||||
|
||||
cd ../..
|
||||
svn update
|
||||
cd trunk
|
||||
|
||||
svn merge ../branches/left --accept postpone
|
||||
|
||||
git cat-file blob b51ad431:Makefile > Makefile
|
||||
|
||||
svn resolved Makefile
|
||||
|
||||
svn commit -m "Merge trunk"
|
||||
|
||||
cd ../..
|
||||
|
||||
svnadmin dump foo.svn > svn-mergeinfo.dump
|
||||
|
||||
rm -rf foo foo.svn
|
||||
736
t/t9151/svn-mergeinfo.dump
Normal file
736
t/t9151/svn-mergeinfo.dump
Normal file
@@ -0,0 +1,736 @@
|
||||
SVN-fs-dump-format-version: 2
|
||||
|
||||
UUID: 1ce241d1-ba54-4eb9-bded-03057fe48a33
|
||||
|
||||
Revision-number: 0
|
||||
Prop-content-length: 56
|
||||
Content-length: 56
|
||||
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:37.692723Z
|
||||
PROPS-END
|
||||
|
||||
Revision-number: 1
|
||||
Prop-content-length: 123
|
||||
Content-length: 123
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 24
|
||||
Setup trunk and branches
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:38.159933Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches
|
||||
Node-kind: dir
|
||||
Node-action: add
|
||||
Prop-content-length: 10
|
||||
Content-length: 10
|
||||
|
||||
PROPS-END
|
||||
|
||||
|
||||
Node-path: trunk
|
||||
Node-kind: dir
|
||||
Node-action: add
|
||||
Prop-content-length: 10
|
||||
Content-length: 10
|
||||
|
||||
PROPS-END
|
||||
|
||||
|
||||
Revision-number: 2
|
||||
Prop-content-length: 106
|
||||
Content-length: 106
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 8
|
||||
ancestor
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:39.160059Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: trunk/Makefile
|
||||
Node-kind: file
|
||||
Node-action: add
|
||||
Prop-content-length: 10
|
||||
Text-content-length: 2401
|
||||
Text-content-md5: bfd8ff778d1492dc6758567373176a89
|
||||
Content-length: 2411
|
||||
|
||||
PROPS-END
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 3
|
||||
Prop-content-length: 115
|
||||
Content-length: 115
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 16
|
||||
make left branch
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:41.148192Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left
|
||||
Node-kind: dir
|
||||
Node-action: add
|
||||
Node-copyfrom-rev: 1
|
||||
Node-copyfrom-path: trunk
|
||||
Prop-content-length: 34
|
||||
Content-length: 34
|
||||
|
||||
K 13
|
||||
svn:mergeinfo
|
||||
V 0
|
||||
|
||||
PROPS-END
|
||||
|
||||
|
||||
Node-path: branches/left/Makefile
|
||||
Node-kind: file
|
||||
Node-action: add
|
||||
Node-copyfrom-rev: 2
|
||||
Node-copyfrom-path: trunk/Makefile
|
||||
Text-copy-source-md5: bfd8ff778d1492dc6758567373176a89
|
||||
|
||||
|
||||
Revision-number: 4
|
||||
Prop-content-length: 112
|
||||
Content-length: 112
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 13
|
||||
left update 1
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:42.148773Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left/Makefile
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2465
|
||||
Text-content-md5: 16e38d9753b061731650561ce01b1195
|
||||
Content-length: 2465
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 5
|
||||
Prop-content-length: 111
|
||||
Content-length: 111
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 12
|
||||
trunk update
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:43.159959Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: trunk/Makefile
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2521
|
||||
Text-content-md5: 0668418a621333f4aa8b6632cd63e2a0
|
||||
Content-length: 2521
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base merge-cache
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o $(LIBS)
|
||||
|
||||
merge-cache: merge-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-cache merge-cache.o read-cache.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 6
|
||||
Prop-content-length: 112
|
||||
Content-length: 112
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 13
|
||||
left update 2
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:44.164175Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left/Makefile
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2529
|
||||
Text-content-md5: f6b197cc3f2e89a83e545d4bb003de73
|
||||
Content-length: 2529
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 7
|
||||
Prop-content-length: 112
|
||||
Content-length: 112
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 13
|
||||
left update 3
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:45.144214Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: branches/left/Makefile
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2593
|
||||
Text-content-md5: 5ccff689fb290e00b85fe18ee50c54ba
|
||||
Content-length: 2593
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
Revision-number: 8
|
||||
Prop-content-length: 110
|
||||
Content-length: 110
|
||||
|
||||
K 7
|
||||
svn:log
|
||||
V 11
|
||||
Merge trunk
|
||||
K 10
|
||||
svn:author
|
||||
V 4
|
||||
samv
|
||||
K 8
|
||||
svn:date
|
||||
V 27
|
||||
2009-10-20T01:33:48.176135Z
|
||||
PROPS-END
|
||||
|
||||
Node-path: trunk
|
||||
Node-kind: dir
|
||||
Node-action: change
|
||||
Prop-content-length: 53
|
||||
Content-length: 53
|
||||
|
||||
K 13
|
||||
svn:mergeinfo
|
||||
V 18
|
||||
/branches/left:2-7
|
||||
PROPS-END
|
||||
|
||||
|
||||
Node-path: trunk/Makefile
|
||||
Node-kind: file
|
||||
Node-action: change
|
||||
Text-content-length: 2713
|
||||
Text-content-md5: 0afbe34f244cd662b1f97d708c687f90
|
||||
Content-length: 2713
|
||||
|
||||
# -DCOLLISION_CHECK if you believe that SHA1's
|
||||
# 1461501637330902918203684832716283019655932542976 hashes do not give you
|
||||
# enough guarantees about no collisions between objects ever hapenning.
|
||||
#
|
||||
# -DNSEC if you want git to care about sub-second file mtimes and ctimes.
|
||||
# Note that you need some new glibc (at least >2.2.4) for this, and it will
|
||||
# BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely randomly
|
||||
# break unless your underlying filesystem supports those sub-second times
|
||||
# (my ext3 doesn't).
|
||||
CFLAGS=-g -O3 -Wall
|
||||
|
||||
CC=gcc
|
||||
|
||||
|
||||
PROG= update-cache show-diff init-db write-tree read-tree commit-tree \
|
||||
cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
|
||||
check-files ls-tree merge-base merge-cache
|
||||
|
||||
all: $(PROG)
|
||||
|
||||
install: $(PROG)
|
||||
install $(PROG) $(HOME)/bin/
|
||||
|
||||
LIBS= -lssl -lz
|
||||
|
||||
init-db: init-db.o
|
||||
|
||||
update-cache: update-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o update-cache update-cache.o read-cache.o $(LIBS)
|
||||
|
||||
show-diff: show-diff.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-diff show-diff.o read-cache.o $(LIBS)
|
||||
|
||||
write-tree: write-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o write-tree write-tree.o read-cache.o $(LIBS)
|
||||
|
||||
read-tree: read-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o read-tree read-tree.o read-cache.o $(LIBS)
|
||||
|
||||
commit-tree: commit-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o commit-tree commit-tree.o read-cache.o $(LIBS)
|
||||
|
||||
cat-file: cat-file.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o cat-file cat-file.o read-cache.o $(LIBS)
|
||||
|
||||
fsck-cache: fsck-cache.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o fsck-cache fsck-cache.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
checkout-cache: checkout-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o checkout-cache checkout-cache.o read-cache.o $(LIBS)
|
||||
|
||||
diff-tree: diff-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o diff-tree diff-tree.o read-cache.o $(LIBS)
|
||||
|
||||
rev-tree: rev-tree.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o rev-tree rev-tree.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
show-files: show-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o show-files show-files.o read-cache.o $(LIBS)
|
||||
|
||||
check-files: check-files.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o check-files check-files.o read-cache.o $(LIBS)
|
||||
|
||||
ls-tree: ls-tree.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o ls-tree ls-tree.o read-cache.o $(LIBS)
|
||||
|
||||
merge-base: merge-base.o read-cache.o object.o commit.o tree.o blob.o
|
||||
$(CC) $(CFLAGS) -o merge-base merge-base.o read-cache.o object.o commit.o tree.o blob.o $(LIBS)
|
||||
|
||||
merge-cache: merge-cache.o read-cache.o
|
||||
$(CC) $(CFLAGS) -o merge-cache merge-cache.o read-cache.o $(LIBS)
|
||||
|
||||
read-cache.o: cache.h
|
||||
show-diff.o: cache.h
|
||||
|
||||
clean:
|
||||
rm -f *.o $(PROG)
|
||||
|
||||
backup: clean
|
||||
cd .. ; tar czvf dircache.tar.gz dir-cache
|
||||
|
||||
|
||||
@@ -812,6 +812,9 @@ struct transport *transport_get(struct remote *remote, const char *url)
|
||||
{
|
||||
struct transport *ret = xcalloc(1, sizeof(*ret));
|
||||
|
||||
if (!remote)
|
||||
die("No remote provided to transport_get()");
|
||||
|
||||
ret->remote = remote;
|
||||
ret->url = url;
|
||||
|
||||
@@ -849,10 +852,10 @@ struct transport *transport_get(struct remote *remote, const char *url)
|
||||
data->thin = 1;
|
||||
data->conn = NULL;
|
||||
data->uploadpack = "git-upload-pack";
|
||||
if (remote && remote->uploadpack)
|
||||
if (remote->uploadpack)
|
||||
data->uploadpack = remote->uploadpack;
|
||||
data->receivepack = "git-receive-pack";
|
||||
if (remote && remote->receivepack)
|
||||
if (remote->receivepack)
|
||||
data->receivepack = remote->receivepack;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user