Merge branch 'maint' to sync with GIT 1.6.0.6
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
10
Documentation/RelNotes-1.5.4.7.txt
Normal file
10
Documentation/RelNotes-1.5.4.7.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
GIT v1.5.4.7 Release Notes
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Fixes since 1.5.4.7
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* Removed support for an obsolete gitweb request URI, whose
|
||||||
|
implementation ran "git diff" Porcelain, instead of using plumbing,
|
||||||
|
which would have run an external diff command specified in the
|
||||||
|
repository configuration as the gitweb user.
|
10
Documentation/RelNotes-1.5.5.6.txt
Normal file
10
Documentation/RelNotes-1.5.5.6.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
GIT v1.5.5.6 Release Notes
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Fixes since 1.5.5.5
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* Removed support for an obsolete gitweb request URI, whose
|
||||||
|
implementation ran "git diff" Porcelain, instead of using plumbing,
|
||||||
|
which would have run an external diff command specified in the
|
||||||
|
repository configuration as the gitweb user.
|
10
Documentation/RelNotes-1.5.6.6.txt
Normal file
10
Documentation/RelNotes-1.5.6.6.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
GIT v1.5.6.6 Release Notes
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Fixes since 1.5.6.5
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* Removed support for an obsolete gitweb request URI, whose
|
||||||
|
implementation ran "git diff" Porcelain, instead of using plumbing,
|
||||||
|
which would have run an external diff command specified in the
|
||||||
|
repository configuration as the gitweb user.
|
33
Documentation/RelNotes-1.6.0.6.txt
Normal file
33
Documentation/RelNotes-1.6.0.6.txt
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
GIT v1.6.0.6 Release Notes
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Fixes since 1.6.0.5
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
* "git fsck" had a deep recursion that wasted stack space.
|
||||||
|
|
||||||
|
* "git fast-export" and "git fast-import" choked on an old style
|
||||||
|
annotated tag that lack the tagger information.
|
||||||
|
|
||||||
|
* "git mergetool -- file" did not correctly skip "--" marker that
|
||||||
|
signals the end of options list.
|
||||||
|
|
||||||
|
* "git show $tag" segfaulted when an annotated $tag pointed at a
|
||||||
|
nonexistent object.
|
||||||
|
|
||||||
|
* "git show 2>error" when the standard output is automatically redirected
|
||||||
|
to the pager redirected the standard error to the pager as well; there
|
||||||
|
was no need to.
|
||||||
|
|
||||||
|
* "git send-email" did not correctly handle list of addresses when
|
||||||
|
they had quoted comma (e.g. "Lastname, Givenname" <mail@addre.ss>).
|
||||||
|
|
||||||
|
* Logic to discover branch ancestry in "git svn" was unreliable when
|
||||||
|
the process to fetch history was interrupted.
|
||||||
|
|
||||||
|
* Removed support for an obsolete gitweb request URI, whose
|
||||||
|
implementation ran "git diff" Porcelain, instead of using plumbing,
|
||||||
|
which would have run an external diff command specified in the
|
||||||
|
repository configuration as the gitweb user.
|
||||||
|
|
||||||
|
Also contains numerous documentation typofixes.
|
@ -222,6 +222,9 @@ D-C-O. Indeed you are encouraged to do so. Do not forget to
|
|||||||
place an in-body "From: " line at the beginning to properly attribute
|
place an in-body "From: " line at the beginning to properly attribute
|
||||||
the change to its true author (see (2) above).
|
the change to its true author (see (2) above).
|
||||||
|
|
||||||
|
Also notice that a real name is used in the Signed-off-by: line. Please
|
||||||
|
don't hide your real name.
|
||||||
|
|
||||||
Some people also put extra tags at the end.
|
Some people also put extra tags at the end.
|
||||||
|
|
||||||
"Acked-by:" says that the patch was reviewed by the person who
|
"Acked-by:" says that the patch was reviewed by the person who
|
||||||
|
@ -58,7 +58,7 @@ Possible status letters are:
|
|||||||
be committed)
|
be committed)
|
||||||
- X: "unknown" change type (most probably a bug, please report it)
|
- X: "unknown" change type (most probably a bug, please report it)
|
||||||
|
|
||||||
Status letters C and M are always followed by a score (denoting the
|
Status letters C and R are always followed by a score (denoting the
|
||||||
percentage of similarity between the source and target of the move or
|
percentage of similarity between the source and target of the move or
|
||||||
copy), and are the only ones to be so.
|
copy), and are the only ones to be so.
|
||||||
|
|
||||||
|
@ -143,15 +143,15 @@ different from it.
|
|||||||
|
|
||||||
A `-` character in the column N means that the line appears in
|
A `-` character in the column N means that the line appears in
|
||||||
fileN but it does not appear in the result. A `+` character
|
fileN but it does not appear in the result. A `+` character
|
||||||
in the column N means that the line appears in the last file,
|
in the column N means that the line appears in the result,
|
||||||
and fileN does not have that line (in other words, the line was
|
and fileN does not have that line (in other words, the line was
|
||||||
added, from the point of view of that parent).
|
added, from the point of view of that parent).
|
||||||
|
|
||||||
In the above example output, the function signature was changed
|
In the above example output, the function signature was changed
|
||||||
from both files (hence two `-` removals from both file1 and
|
from both files (hence two `-` removals from both file1 and
|
||||||
file2, plus `++` to mean one line that was added does not appear
|
file2, plus `++` to mean one line that was added does not appear
|
||||||
in either file1 nor file2). Also two other lines are the same
|
in either file1 nor file2). Also eight other lines are the same
|
||||||
from file1 but do not appear in file2 (hence prefixed with ` +`).
|
from file1 but do not appear in file2 (hence prefixed with `{plus}`).
|
||||||
|
|
||||||
When shown by `git diff-tree -c`, it compares the parents of a
|
When shown by `git diff-tree -c`, it compares the parents of a
|
||||||
merge commit with the merge result (i.e. file1..fileN are the
|
merge commit with the merge result (i.e. file1..fileN are the
|
||||||
|
@ -166,7 +166,7 @@ FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].)
|
|||||||
'git-commit' if any paths are given on the command line,
|
'git-commit' if any paths are given on the command line,
|
||||||
in which case this option can be omitted.
|
in which case this option can be omitted.
|
||||||
If this option is specified together with '--amend', then
|
If this option is specified together with '--amend', then
|
||||||
no paths need be specified, which can be used to amend
|
no paths need to be specified, which can be used to amend
|
||||||
the last commit without committing changes that have
|
the last commit without committing changes that have
|
||||||
already been staged.
|
already been staged.
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ include::diff-options.txt[]
|
|||||||
show tree entry itself as well as subtrees. Implies -r.
|
show tree entry itself as well as subtrees. Implies -r.
|
||||||
|
|
||||||
--root::
|
--root::
|
||||||
When '--root' is specified the initial commit will be showed as a big
|
When '--root' is specified the initial commit will be shown as a big
|
||||||
creation event. This is equivalent to a diff against the NULL tree.
|
creation event. This is equivalent to a diff against the NULL tree.
|
||||||
|
|
||||||
--stdin::
|
--stdin::
|
||||||
|
@ -65,6 +65,12 @@ If the backend uses a similar \--import-marks file, this allows for
|
|||||||
incremental bidirectional exporting of the repository by keeping the
|
incremental bidirectional exporting of the repository by keeping the
|
||||||
marks the same across runs.
|
marks the same across runs.
|
||||||
|
|
||||||
|
--fake-missing-tagger::
|
||||||
|
Some old repositories have tags without a tagger. The
|
||||||
|
fast-import protocol was pretty strict about that, and did not
|
||||||
|
allow that. So fake a tagger to be able to fast-import the
|
||||||
|
output.
|
||||||
|
|
||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
--------
|
--------
|
||||||
|
@ -13,7 +13,7 @@ SYNOPSIS
|
|||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
Reading a single e-mail message from the standard input, and
|
Reads a single e-mail message from the standard input, and
|
||||||
writes the commit log message in <msg> file, and the patches in
|
writes the commit log message in <msg> file, and the patches in
|
||||||
<patch> file. The author name, e-mail and e-mail subject are
|
<patch> file. The author name, e-mail and e-mail subject are
|
||||||
written out to the standard output to be used by 'git-am'
|
written out to the standard output to be used by 'git-am'
|
||||||
|
@ -86,7 +86,7 @@ post-receive Hook
|
|||||||
-----------------
|
-----------------
|
||||||
After all refs were updated (or attempted to be updated), if any
|
After all refs were updated (or attempted to be updated), if any
|
||||||
ref update was successful, and if $GIT_DIR/hooks/post-receive
|
ref update was successful, and if $GIT_DIR/hooks/post-receive
|
||||||
file exists and is executable, it will be invoke once with no
|
file exists and is executable, it will be invoked once with no
|
||||||
parameters. The standard input of the hook will be one line
|
parameters. The standard input of the hook will be one line
|
||||||
for each successfully updated ref:
|
for each successfully updated ref:
|
||||||
|
|
||||||
@ -133,7 +133,7 @@ post-update Hook
|
|||||||
----------------
|
----------------
|
||||||
After all other processing, if at least one ref was updated, and
|
After all other processing, if at least one ref was updated, and
|
||||||
if $GIT_DIR/hooks/post-update file exists and is executable, then
|
if $GIT_DIR/hooks/post-update file exists and is executable, then
|
||||||
post-update will called with the list of refs that have been updated.
|
post-update will be called with the list of refs that have been updated.
|
||||||
This can be used to implement any repository wide cleanup tasks.
|
This can be used to implement any repository wide cleanup tasks.
|
||||||
|
|
||||||
The exit code from this hook invocation is ignored; the only thing
|
The exit code from this hook invocation is ignored; the only thing
|
||||||
|
@ -28,7 +28,7 @@ updated. This command is to manage the information recorded in it.
|
|||||||
|
|
||||||
The subcommand "expire" is used to prune older reflog entries.
|
The subcommand "expire" is used to prune older reflog entries.
|
||||||
Entries older than `expire` time, or entries older than
|
Entries older than `expire` time, or entries older than
|
||||||
`expire-unreachable` time and are not reachable from the current
|
`expire-unreachable` time and not reachable from the current
|
||||||
tip, are removed from the reflog. This is typically not used
|
tip, are removed from the reflog. This is typically not used
|
||||||
directly by the end users -- instead, see linkgit:git-gc[1].
|
directly by the end users -- instead, see linkgit:git-gc[1].
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ them.
|
|||||||
which in turn defaults to 90 days.
|
which in turn defaults to 90 days.
|
||||||
|
|
||||||
--expire-unreachable=<time>::
|
--expire-unreachable=<time>::
|
||||||
Entries older than this time and are not reachable from
|
Entries older than this time and not reachable from
|
||||||
the current tip of the branch are pruned. Without the
|
the current tip of the branch are pruned. Without the
|
||||||
option it is taken from configuration
|
option it is taken from configuration
|
||||||
`gc.reflogExpireUnreachable`, which in turn defaults to
|
`gc.reflogExpireUnreachable`, which in turn defaults to
|
||||||
|
@ -30,7 +30,7 @@ OPTIONS
|
|||||||
-------
|
-------
|
||||||
<rev>::
|
<rev>::
|
||||||
Arbitrary extended SHA1 expression (see linkgit:git-rev-parse[1])
|
Arbitrary extended SHA1 expression (see linkgit:git-rev-parse[1])
|
||||||
that typically names a branch HEAD or a tag.
|
that typically names a branch head or a tag.
|
||||||
|
|
||||||
<glob>::
|
<glob>::
|
||||||
A glob pattern that matches branch or tag names under
|
A glob pattern that matches branch or tag names under
|
||||||
|
@ -87,7 +87,7 @@ use by subsequent users cloning the superproject. If the URL is
|
|||||||
given relative to the superproject's repository, the presumption
|
given relative to the superproject's repository, the presumption
|
||||||
is the superproject and submodule repositories will be kept
|
is the superproject and submodule repositories will be kept
|
||||||
together in the same relative location, and only the
|
together in the same relative location, and only the
|
||||||
superproject's URL need be provided: git-submodule will correctly
|
superproject's URL needs to be provided: git-submodule will correctly
|
||||||
locate the submodule using the relative URL in .gitmodules.
|
locate the submodule using the relative URL in .gitmodules.
|
||||||
|
|
||||||
status::
|
status::
|
||||||
|
@ -55,7 +55,7 @@ OPTIONS
|
|||||||
default behavior is to error out. This option makes
|
default behavior is to error out. This option makes
|
||||||
'git-update-index' continue anyway.
|
'git-update-index' continue anyway.
|
||||||
|
|
||||||
--ignore-submodules:
|
--ignore-submodules::
|
||||||
Do not try to update submodules. This option is only respected
|
Do not try to update submodules. This option is only respected
|
||||||
when passed before --refresh.
|
when passed before --refresh.
|
||||||
|
|
||||||
@ -78,9 +78,9 @@ OPTIONS
|
|||||||
|
|
||||||
--assume-unchanged::
|
--assume-unchanged::
|
||||||
--no-assume-unchanged::
|
--no-assume-unchanged::
|
||||||
When these flags are specified, the object name recorded
|
When these flags are specified, the object names recorded
|
||||||
for the paths are not updated. Instead, these options
|
for the paths are not updated. Instead, these options
|
||||||
sets and unsets the "assume unchanged" bit for the
|
set and unset the "assume unchanged" bit for the
|
||||||
paths. When the "assume unchanged" bit is on, git stops
|
paths. When the "assume unchanged" bit is on, git stops
|
||||||
checking the working tree files for possible
|
checking the working tree files for possible
|
||||||
modifications, so you need to manually unset the bit to
|
modifications, so you need to manually unset the bit to
|
||||||
@ -122,7 +122,7 @@ you will need to handle the situation manually.
|
|||||||
'git-update-index' refuses an attempt to add `path/file`.
|
'git-update-index' refuses an attempt to add `path/file`.
|
||||||
Similarly if a file `path/file` exists, a file `path`
|
Similarly if a file `path/file` exists, a file `path`
|
||||||
cannot be added. With --replace flag, existing entries
|
cannot be added. With --replace flag, existing entries
|
||||||
that conflicts with the entry being added are
|
that conflict with the entry being added are
|
||||||
automatically removed with warning messages.
|
automatically removed with warning messages.
|
||||||
|
|
||||||
--stdin::
|
--stdin::
|
||||||
|
@ -43,9 +43,10 @@ unreleased) version of git, that is available from 'master'
|
|||||||
branch of the `git.git` repository.
|
branch of the `git.git` repository.
|
||||||
Documentation for older releases are available here:
|
Documentation for older releases are available here:
|
||||||
|
|
||||||
* link:v1.6.0.5/git.html[documentation for release 1.6.0.5]
|
* link:v1.6.0.6/git.html[documentation for release 1.6.0.6]
|
||||||
|
|
||||||
* release notes for
|
* release notes for
|
||||||
|
link:RelNotes-1.6.0.6.txt[1.6.0.6],
|
||||||
link:RelNotes-1.6.0.5.txt[1.6.0.5],
|
link:RelNotes-1.6.0.5.txt[1.6.0.5],
|
||||||
link:RelNotes-1.6.0.4.txt[1.6.0.4],
|
link:RelNotes-1.6.0.4.txt[1.6.0.4],
|
||||||
link:RelNotes-1.6.0.3.txt[1.6.0.3],
|
link:RelNotes-1.6.0.3.txt[1.6.0.3],
|
||||||
@ -53,9 +54,10 @@ Documentation for older releases are available here:
|
|||||||
link:RelNotes-1.6.0.1.txt[1.6.0.1],
|
link:RelNotes-1.6.0.1.txt[1.6.0.1],
|
||||||
link:RelNotes-1.6.0.txt[1.6.0].
|
link:RelNotes-1.6.0.txt[1.6.0].
|
||||||
|
|
||||||
* link:v1.5.6.5/git.html[documentation for release 1.5.6.5]
|
* link:v1.5.6.6/git.html[documentation for release 1.5.6.6]
|
||||||
|
|
||||||
* release notes for
|
* release notes for
|
||||||
|
link:RelNotes-1.5.6.6.txt[1.5.6.6],
|
||||||
link:RelNotes-1.5.6.5.txt[1.5.6.5],
|
link:RelNotes-1.5.6.5.txt[1.5.6.5],
|
||||||
link:RelNotes-1.5.6.4.txt[1.5.6.4],
|
link:RelNotes-1.5.6.4.txt[1.5.6.4],
|
||||||
link:RelNotes-1.5.6.3.txt[1.5.6.3],
|
link:RelNotes-1.5.6.3.txt[1.5.6.3],
|
||||||
@ -63,18 +65,22 @@ Documentation for older releases are available here:
|
|||||||
link:RelNotes-1.5.6.1.txt[1.5.6.1],
|
link:RelNotes-1.5.6.1.txt[1.5.6.1],
|
||||||
link:RelNotes-1.5.6.txt[1.5.6].
|
link:RelNotes-1.5.6.txt[1.5.6].
|
||||||
|
|
||||||
* link:v1.5.5.4/git.html[documentation for release 1.5.5.4]
|
* link:v1.5.5.6/git.html[documentation for release 1.5.5.6]
|
||||||
|
|
||||||
* release notes for
|
* release notes for
|
||||||
|
link:RelNotes-1.5.5.6.txt[1.5.5.6],
|
||||||
|
link:RelNotes-1.5.5.5.txt[1.5.5.5],
|
||||||
link:RelNotes-1.5.5.4.txt[1.5.5.4],
|
link:RelNotes-1.5.5.4.txt[1.5.5.4],
|
||||||
link:RelNotes-1.5.5.3.txt[1.5.5.3],
|
link:RelNotes-1.5.5.3.txt[1.5.5.3],
|
||||||
link:RelNotes-1.5.5.2.txt[1.5.5.2],
|
link:RelNotes-1.5.5.2.txt[1.5.5.2],
|
||||||
link:RelNotes-1.5.5.1.txt[1.5.5.1],
|
link:RelNotes-1.5.5.1.txt[1.5.5.1],
|
||||||
link:RelNotes-1.5.5.txt[1.5.5].
|
link:RelNotes-1.5.5.txt[1.5.5].
|
||||||
|
|
||||||
* link:v1.5.4.5/git.html[documentation for release 1.5.4.5]
|
* link:v1.5.4.7/git.html[documentation for release 1.5.4.7]
|
||||||
|
|
||||||
* release notes for
|
* release notes for
|
||||||
|
link:RelNotes-1.5.4.7.txt[1.5.4.7],
|
||||||
|
link:RelNotes-1.5.4.6.txt[1.5.4.6],
|
||||||
link:RelNotes-1.5.4.5.txt[1.5.4.5],
|
link:RelNotes-1.5.4.5.txt[1.5.4.5],
|
||||||
link:RelNotes-1.5.4.4.txt[1.5.4.4],
|
link:RelNotes-1.5.4.4.txt[1.5.4.4],
|
||||||
link:RelNotes-1.5.4.3.txt[1.5.4.3],
|
link:RelNotes-1.5.4.3.txt[1.5.4.3],
|
||||||
|
@ -999,8 +999,8 @@ Fast forward (no commit created; -m option ignored)
|
|||||||
2 files changed, 2 insertions(+), 0 deletions(-)
|
2 files changed, 2 insertions(+), 0 deletions(-)
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
Because your branch did not contain anything more than what are
|
Because your branch did not contain anything more than what had
|
||||||
already merged into the `master` branch, the merge operation did
|
already been merged into the `master` branch, the merge operation did
|
||||||
not actually do a merge. Instead, it just updated the top of
|
not actually do a merge. Instead, it just updated the top of
|
||||||
the tree of your branch to that of the `master` branch. This is
|
the tree of your branch to that of the `master` branch. This is
|
||||||
often called 'fast forward' merge.
|
often called 'fast forward' merge.
|
||||||
@ -1352,7 +1352,7 @@ $ GIT_DIR=my-git.git git init
|
|||||||
------------
|
------------
|
||||||
|
|
||||||
Make sure this directory is available for others you want your
|
Make sure this directory is available for others you want your
|
||||||
changes to be pulled by via the transport of your choice. Also
|
changes to be pulled via the transport of your choice. Also
|
||||||
you need to make sure that you have the 'git-receive-pack'
|
you need to make sure that you have the 'git-receive-pack'
|
||||||
program on the `$PATH`.
|
program on the `$PATH`.
|
||||||
|
|
||||||
@ -1511,7 +1511,7 @@ You can repack this private repository whenever you feel like.
|
|||||||
6. Push your changes to the public repository, and announce it
|
6. Push your changes to the public repository, and announce it
|
||||||
to the public.
|
to the public.
|
||||||
|
|
||||||
7. Every once in a while, "git-repack" the public repository.
|
7. Every once in a while, 'git-repack' the public repository.
|
||||||
Go back to step 5. and continue working.
|
Go back to step 5. and continue working.
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ git repository.
|
|||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
-------
|
-------
|
||||||
To control which revisions to shown, the command takes options applicable to
|
To control which revisions to show, the command takes options applicable to
|
||||||
the 'git-rev-list' command (see linkgit:git-rev-list[1]).
|
the 'git-rev-list' command (see linkgit:git-rev-list[1]).
|
||||||
This manual page describes only the most
|
This manual page describes only the most
|
||||||
frequently used options.
|
frequently used options.
|
||||||
@ -80,7 +80,7 @@ Examples
|
|||||||
--------
|
--------
|
||||||
gitk v2.6.12.. include/scsi drivers/scsi::
|
gitk v2.6.12.. include/scsi drivers/scsi::
|
||||||
|
|
||||||
Show as the changes since version 'v2.6.12' that changed any
|
Show the changes since version 'v2.6.12' that changed any
|
||||||
file in the include/scsi or drivers/scsi subdirectories
|
file in the include/scsi or drivers/scsi subdirectories
|
||||||
|
|
||||||
gitk --since="2 weeks ago" \-- gitk::
|
gitk --since="2 weeks ago" \-- gitk::
|
||||||
|
@ -7,11 +7,11 @@ At the core level, git is character encoding agnostic.
|
|||||||
to be what lstat(2) and creat(2) accepts. There is no such
|
to be what lstat(2) and creat(2) accepts. There is no such
|
||||||
thing as pathname encoding translation.
|
thing as pathname encoding translation.
|
||||||
|
|
||||||
- The contents of the blob objects are uninterpreted sequence
|
- The contents of the blob objects are uninterpreted sequences
|
||||||
of bytes. There is no encoding translation at the core
|
of bytes. There is no encoding translation at the core
|
||||||
level.
|
level.
|
||||||
|
|
||||||
- The commit log messages are uninterpreted sequence of non-NUL
|
- The commit log messages are uninterpreted sequences of non-NUL
|
||||||
bytes.
|
bytes.
|
||||||
|
|
||||||
Although we encourage that the commit log messages are encoded
|
Although we encourage that the commit log messages are encoded
|
||||||
|
@ -24,6 +24,7 @@ static const char *fast_export_usage[] = {
|
|||||||
|
|
||||||
static int progress;
|
static int progress;
|
||||||
static enum { VERBATIM, WARN, STRIP, ABORT } signed_tag_mode = ABORT;
|
static enum { VERBATIM, WARN, STRIP, ABORT } signed_tag_mode = ABORT;
|
||||||
|
static int fake_missing_tagger;
|
||||||
|
|
||||||
static int parse_opt_signed_tag_mode(const struct option *opt,
|
static int parse_opt_signed_tag_mode(const struct option *opt,
|
||||||
const char *arg, int unset)
|
const char *arg, int unset)
|
||||||
@ -297,10 +298,17 @@ static void handle_tag(const char *name, struct tag *tag)
|
|||||||
message_size = strlen(message);
|
message_size = strlen(message);
|
||||||
}
|
}
|
||||||
tagger = memmem(buf, message ? message - buf : size, "\ntagger ", 8);
|
tagger = memmem(buf, message ? message - buf : size, "\ntagger ", 8);
|
||||||
if (!tagger)
|
if (!tagger) {
|
||||||
die ("No tagger for tag %s", sha1_to_hex(tag->object.sha1));
|
if (fake_missing_tagger)
|
||||||
tagger++;
|
tagger = "tagger Unspecified Tagger "
|
||||||
tagger_end = strchrnul(tagger, '\n');
|
"<unspecified-tagger> 0 +0000";
|
||||||
|
else
|
||||||
|
tagger = "";
|
||||||
|
tagger_end = tagger + strlen(tagger);
|
||||||
|
} else {
|
||||||
|
tagger++;
|
||||||
|
tagger_end = strchrnul(tagger, '\n');
|
||||||
|
}
|
||||||
|
|
||||||
/* handle signed tags */
|
/* handle signed tags */
|
||||||
if (message) {
|
if (message) {
|
||||||
@ -326,9 +334,10 @@ static void handle_tag(const char *name, struct tag *tag)
|
|||||||
|
|
||||||
if (!prefixcmp(name, "refs/tags/"))
|
if (!prefixcmp(name, "refs/tags/"))
|
||||||
name += 10;
|
name += 10;
|
||||||
printf("tag %s\nfrom :%d\n%.*s\ndata %d\n%.*s\n",
|
printf("tag %s\nfrom :%d\n%.*s%sdata %d\n%.*s\n",
|
||||||
name, get_object_mark(tag->tagged),
|
name, get_object_mark(tag->tagged),
|
||||||
(int)(tagger_end - tagger), tagger,
|
(int)(tagger_end - tagger), tagger,
|
||||||
|
tagger == tagger_end ? "" : "\n",
|
||||||
(int)message_size, (int)message_size, message ? message : "");
|
(int)message_size, (int)message_size, message ? message : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -483,6 +492,8 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
|
|||||||
"Dump marks to this file"),
|
"Dump marks to this file"),
|
||||||
OPT_STRING(0, "import-marks", &import_filename, "FILE",
|
OPT_STRING(0, "import-marks", &import_filename, "FILE",
|
||||||
"Import marks from this file"),
|
"Import marks from this file"),
|
||||||
|
OPT_BOOLEAN(0, "fake-missing-tagger", &fake_missing_tagger,
|
||||||
|
"Fake a tagger when tags lack one"),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ Format of STDIN stream:
|
|||||||
|
|
||||||
new_tag ::= 'tag' sp tag_str lf
|
new_tag ::= 'tag' sp tag_str lf
|
||||||
'from' sp (ref_str | hexsha1 | sha1exp_str | idnum) lf
|
'from' sp (ref_str | hexsha1 | sha1exp_str | idnum) lf
|
||||||
'tagger' sp name '<' email '>' when lf
|
('tagger' sp name '<' email '>' when lf)?
|
||||||
tag_msg;
|
tag_msg;
|
||||||
tag_msg ::= data;
|
tag_msg ::= data;
|
||||||
|
|
||||||
@ -2265,23 +2265,27 @@ static void parse_new_tag(void)
|
|||||||
read_next_command();
|
read_next_command();
|
||||||
|
|
||||||
/* tagger ... */
|
/* tagger ... */
|
||||||
if (prefixcmp(command_buf.buf, "tagger "))
|
if (!prefixcmp(command_buf.buf, "tagger ")) {
|
||||||
die("Expected tagger command, got %s", command_buf.buf);
|
tagger = parse_ident(command_buf.buf + 7);
|
||||||
tagger = parse_ident(command_buf.buf + 7);
|
read_next_command();
|
||||||
|
} else
|
||||||
|
tagger = NULL;
|
||||||
|
|
||||||
/* tag payload/message */
|
/* tag payload/message */
|
||||||
read_next_command();
|
|
||||||
parse_data(&msg);
|
parse_data(&msg);
|
||||||
|
|
||||||
/* build the tag object */
|
/* build the tag object */
|
||||||
strbuf_reset(&new_data);
|
strbuf_reset(&new_data);
|
||||||
|
|
||||||
strbuf_addf(&new_data,
|
strbuf_addf(&new_data,
|
||||||
"object %s\n"
|
"object %s\n"
|
||||||
"type %s\n"
|
"type %s\n"
|
||||||
"tag %s\n"
|
"tag %s\n",
|
||||||
"tagger %s\n"
|
sha1_to_hex(sha1), commit_type, t->name);
|
||||||
"\n",
|
if (tagger)
|
||||||
sha1_to_hex(sha1), commit_type, t->name, tagger);
|
strbuf_addf(&new_data,
|
||||||
|
"tagger %s\n", tagger);
|
||||||
|
strbuf_addch(&new_data, '\n');
|
||||||
strbuf_addbuf(&new_data, &msg);
|
strbuf_addbuf(&new_data, &msg);
|
||||||
free(tagger);
|
free(tagger);
|
||||||
|
|
||||||
|
@ -296,6 +296,7 @@ do
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
--)
|
--)
|
||||||
|
shift
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
-*)
|
-*)
|
||||||
|
@ -20,6 +20,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Term::ReadLine;
|
use Term::ReadLine;
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
|
use Text::ParseWords;
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
use Term::ANSIColor;
|
use Term::ANSIColor;
|
||||||
use File::Temp qw/ tempdir /;
|
use File::Temp qw/ tempdir /;
|
||||||
@ -359,6 +360,10 @@ foreach my $entry (@bcclist) {
|
|||||||
die "Comma in --bcclist entry: $entry'\n" unless $entry !~ m/,/;
|
die "Comma in --bcclist entry: $entry'\n" unless $entry !~ m/,/;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub split_addrs {
|
||||||
|
return parse_line('\s*,\s*', 1, @_);
|
||||||
|
}
|
||||||
|
|
||||||
my %aliases;
|
my %aliases;
|
||||||
my %parse_alias = (
|
my %parse_alias = (
|
||||||
# multiline formats can be supported in the future
|
# multiline formats can be supported in the future
|
||||||
@ -367,7 +372,7 @@ my %parse_alias = (
|
|||||||
my ($alias, $addr) = ($1, $2);
|
my ($alias, $addr) = ($1, $2);
|
||||||
$addr =~ s/#.*$//; # mutt allows # comments
|
$addr =~ s/#.*$//; # mutt allows # comments
|
||||||
# commas delimit multiple addresses
|
# commas delimit multiple addresses
|
||||||
$aliases{$alias} = [ split(/\s*,\s*/, $addr) ];
|
$aliases{$alias} = [ split_addrs($addr) ];
|
||||||
}}},
|
}}},
|
||||||
mailrc => sub { my $fh = shift; while (<$fh>) {
|
mailrc => sub { my $fh = shift; while (<$fh>) {
|
||||||
if (/^alias\s+(\S+)\s+(.*)$/) {
|
if (/^alias\s+(\S+)\s+(.*)$/) {
|
||||||
@ -379,7 +384,7 @@ my %parse_alias = (
|
|||||||
chomp $x;
|
chomp $x;
|
||||||
$x .= $1 while(defined($_ = <$fh>) && /^ +(.*)$/);
|
$x .= $1 while(defined($_ = <$fh>) && /^ +(.*)$/);
|
||||||
$x =~ /^(\S+)$f\t\(?([^\t]+?)\)?(:?$f){0,2}$/ or next;
|
$x =~ /^(\S+)$f\t\(?([^\t]+?)\)?(:?$f){0,2}$/ or next;
|
||||||
$aliases{$1} = [ split(/\s*,\s*/, $2) ];
|
$aliases{$1} = [ split_addrs($2) ];
|
||||||
}},
|
}},
|
||||||
gnus => sub { my $fh = shift; while (<$fh>) {
|
gnus => sub { my $fh = shift; while (<$fh>) {
|
||||||
if (/\(define-mail-alias\s+"(\S+?)"\s+"(\S+?)"\)/) {
|
if (/\(define-mail-alias\s+"(\S+?)"\s+"(\S+?)"\)/) {
|
||||||
@ -588,7 +593,7 @@ if (!@to) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
my $to = $_;
|
my $to = $_;
|
||||||
push @to, split /,\s*/, $to;
|
push @to, split_addrs($to);
|
||||||
$prompting++;
|
$prompting++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,6 +56,12 @@ M 644 :2 file2
|
|||||||
M 644 :3 file3
|
M 644 :3 file3
|
||||||
M 755 :4 file4
|
M 755 :4 file4
|
||||||
|
|
||||||
|
tag series-A
|
||||||
|
from :5
|
||||||
|
data <<EOF
|
||||||
|
An annotated tag without a tagger
|
||||||
|
EOF
|
||||||
|
|
||||||
INPUT_END
|
INPUT_END
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
'A: create pack from stdin' \
|
'A: create pack from stdin' \
|
||||||
@ -101,6 +107,18 @@ test_expect_success \
|
|||||||
'A: verify file4' \
|
'A: verify file4' \
|
||||||
'git cat-file blob master:file4 >actual && test_cmp expect actual'
|
'git cat-file blob master:file4 >actual && test_cmp expect actual'
|
||||||
|
|
||||||
|
cat >expect <<EOF
|
||||||
|
object $(git rev-parse refs/heads/master)
|
||||||
|
type commit
|
||||||
|
tag series-A
|
||||||
|
|
||||||
|
An annotated tag without a tagger
|
||||||
|
EOF
|
||||||
|
test_expect_success 'A: verify tag/series-A' '
|
||||||
|
git cat-file tag tags/series-A >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
cat >expect <<EOF
|
cat >expect <<EOF
|
||||||
:2 `git rev-parse --verify master:file2`
|
:2 `git rev-parse --verify master:file2`
|
||||||
:3 `git rev-parse --verify master:file3`
|
:3 `git rev-parse --verify master:file3`
|
||||||
|
@ -239,4 +239,24 @@ test_expect_success 'fast-export | fast-import when master is tagged' '
|
|||||||
|
|
||||||
'
|
'
|
||||||
|
|
||||||
|
cat > tag-content << EOF
|
||||||
|
object $(git rev-parse HEAD)
|
||||||
|
type commit
|
||||||
|
tag rosten
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success 'cope with tagger-less tags' '
|
||||||
|
|
||||||
|
TAG=$(git hash-object -t tag -w tag-content) &&
|
||||||
|
git update-ref refs/tags/sonnenschein $TAG &&
|
||||||
|
git fast-export -C -C --signed-tags=strip --all > output &&
|
||||||
|
test $(grep -c "^tag " output) = 4 &&
|
||||||
|
! grep "Unspecified Tagger" output &&
|
||||||
|
git fast-export -C -C --signed-tags=strip --all \
|
||||||
|
--fake-missing-tagger > output &&
|
||||||
|
test $(grep -c "^tag " output) = 4 &&
|
||||||
|
grep "Unspecified Tagger" output
|
||||||
|
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Reference in New Issue
Block a user