mirror of
https://github.com/git/git.git
synced 2026-03-13 18:33:25 +01:00
Merge branch 'master' into next
* master: git-fsck-objects is now synonym to git-fsck [PATCH] Rename git-repo-config to git-config. Heavily expanded update hook to send more useful emails than the old hook UNIX reference time of 1970-01-01 00:00 is UTC timezone, not local time zone Teach for-each-ref about a little language called Tcl. Add a sample program 'blameview' to show how to use git-blame --incremental git-push through git protocol Document 'git-blame --incremental' Documentation/config.txt: Fix documentation of colour config tweaks. wt-status: Actually accept `color.status.BLAH' configuration variables. git-blame --incremental: don't use pager
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -23,6 +23,7 @@ git-clean
|
||||
git-clone
|
||||
git-commit
|
||||
git-commit-tree
|
||||
git-config
|
||||
git-convert-objects
|
||||
git-count-objects
|
||||
git-cvsexportcommit
|
||||
@@ -41,6 +42,7 @@ git-findtags
|
||||
git-fmt-merge-msg
|
||||
git-for-each-ref
|
||||
git-format-patch
|
||||
git-fsck
|
||||
git-fsck-objects
|
||||
git-gc
|
||||
git-get-tar-commit-id
|
||||
|
||||
@@ -97,7 +97,7 @@ git-fetch-pack synchingrepositories
|
||||
git-fmt-merge-msg purehelpers
|
||||
git-for-each-ref plumbinginterrogators
|
||||
git-format-patch mainporcelain
|
||||
git-fsck-objects ancillaryinterrogators
|
||||
git-fsck ancillaryinterrogators
|
||||
git-gc mainporcelain
|
||||
git-get-tar-commit-id ancillaryinterrogators
|
||||
git-grep mainporcelain
|
||||
@@ -144,7 +144,7 @@ git-receive-pack synchelpers
|
||||
git-reflog ancillarymanipulators
|
||||
git-relink ancillarymanipulators
|
||||
git-repack ancillarymanipulators
|
||||
git-repo-config ancillarymanipulators
|
||||
git-config ancillarymanipulators
|
||||
git-request-pull foreignscminterface
|
||||
git-rerere ancillaryinterrogators
|
||||
git-reset mainporcelain
|
||||
|
||||
@@ -62,7 +62,7 @@ The values following the equals sign in variable assign are all either
|
||||
a string, an integer, or a boolean. Boolean values may be given as yes/no,
|
||||
0/1 or true/false. Case is not significant in boolean values, when
|
||||
converting value to the canonical form using '--bool' type specifier;
|
||||
`git-repo-config` will ensure that the output is "true" or "false".
|
||||
`git-config` will ensure that the output is "true" or "false".
|
||||
|
||||
String values may be entirely or partially enclosed in double quotes.
|
||||
You need to enclose variable value in double quotes if you want to
|
||||
@@ -250,10 +250,15 @@ color.branch.<slot>::
|
||||
Use customized color for branch coloration. `<slot>` is one of
|
||||
`current` (the current branch), `local` (a local branch),
|
||||
`remote` (a tracking branch in refs/remotes/), `plain` (other
|
||||
refs), or `reset` (the normal terminal color). The value for
|
||||
these configuration variables can be one of: `normal`, `bold`,
|
||||
`dim`, `ul`, `blink`, `reverse`, `reset`, `black`, `red`,
|
||||
`green`, `yellow`, `blue`, `magenta`, `cyan`, or `white`.
|
||||
refs).
|
||||
+
|
||||
The value for these configuration variables is a list of colors (at most
|
||||
two) and attributes (at most one), separated by spaces. The colors
|
||||
accepted are `normal`, `black`, `red`, `green`, `yellow`, `blue`,
|
||||
`magenta`, `cyan` and `white`; the attributes are `bold`, `dim`, `ul`,
|
||||
`blink` and `reverse`. The first color given is the foreground; the
|
||||
second is the background. The position of the attribute, if any,
|
||||
doesn't matter.
|
||||
|
||||
color.diff::
|
||||
When true (or `always`), always use colors in patch.
|
||||
@@ -261,12 +266,13 @@ color.diff::
|
||||
colors only when the output is to the terminal.
|
||||
|
||||
color.diff.<slot>::
|
||||
Use customized color for diff colorization. `<slot>`
|
||||
specifies which part of the patch to use the specified
|
||||
color, and is one of `plain` (context text), `meta`
|
||||
(metainformation), `frag` (hunk header), `old` (removed
|
||||
lines), or `new` (added lines). The values of these
|
||||
variables may be specified as in color.branch.<slot>.
|
||||
Use customized color for diff colorization. `<slot>` specifies
|
||||
which part of the patch to use the specified color, and is one
|
||||
of `plain` (context text), `meta` (metainformation), `frag`
|
||||
(hunk header), `old` (removed lines), `new` (added lines),
|
||||
`commit` (commit headers), or `whitespace` (highlighting dubious
|
||||
whitespace). The values of these variables may be specified as
|
||||
in color.branch.<slot>.
|
||||
|
||||
color.pager::
|
||||
A boolean to enable/disable colored output when the pager is in
|
||||
|
||||
@@ -82,7 +82,7 @@ size> + <byte\0> + <binary object data>.
|
||||
|
||||
The structured objects can further have their structure and
|
||||
connectivity to other objects verified. This is generally done with
|
||||
the `git-fsck-objects` program, which generates a full dependency graph
|
||||
the `git-fsck` program, which generates a full dependency graph
|
||||
of all objects, and verifies their internal consistency (in addition
|
||||
to just verifying their superficial consistency through the hash).
|
||||
|
||||
|
||||
@@ -1130,7 +1130,7 @@ the remote repository URL in the local repository's config file
|
||||
like this:
|
||||
|
||||
------------------------------------------------
|
||||
$ git repo-config remote.linus.url http://www.kernel.org/pub/scm/git/git.git/
|
||||
$ git config remote.linus.url http://www.kernel.org/pub/scm/git/git.git/
|
||||
------------------------------------------------
|
||||
|
||||
and use the "linus" keyword with `git pull` instead of the full URL.
|
||||
|
||||
@@ -36,7 +36,7 @@ them first before running git pull.
|
||||
================================
|
||||
The `pull` command knows where to get updates from because of certain
|
||||
configuration variables that were set by the first `git clone`
|
||||
command; see `git repo-config -l` and the gitlink:git-repo-config[1] man
|
||||
command; see `git config -l` and the gitlink:git-config[1] man
|
||||
page for details.
|
||||
================================
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ Everybody uses these commands to maintain git repositories.
|
||||
* gitlink:git-init[1] or gitlink:git-clone[1] to create a
|
||||
new repository.
|
||||
|
||||
* gitlink:git-fsck-objects[1] to check the repository for errors.
|
||||
* gitlink:git-fsck[1] to check the repository for errors.
|
||||
|
||||
* gitlink:git-prune[1] to remove unused objects in the repository.
|
||||
|
||||
@@ -43,7 +43,7 @@ Examples
|
||||
Check health and remove cruft.::
|
||||
+
|
||||
------------
|
||||
$ git fsck-objects <1>
|
||||
$ git fsck <1>
|
||||
$ git count-objects <2>
|
||||
$ git repack <3>
|
||||
$ git gc <4>
|
||||
@@ -212,12 +212,12 @@ Push into another repository.::
|
||||
------------
|
||||
satellite$ git clone mothership:frotz frotz <1>
|
||||
satellite$ cd frotz
|
||||
satellite$ git repo-config --get-regexp '^(remote|branch)\.' <2>
|
||||
satellite$ git config --get-regexp '^(remote|branch)\.' <2>
|
||||
remote.origin.url mothership:frotz
|
||||
remote.origin.fetch refs/heads/*:refs/remotes/origin/*
|
||||
branch.master.remote origin
|
||||
branch.master.merge refs/heads/master
|
||||
satellite$ git repo-config remote.origin.push \
|
||||
satellite$ git config remote.origin.push \
|
||||
master:refs/remotes/satellite/master <3>
|
||||
satellite$ edit/compile/test/commit
|
||||
satellite$ git push origin <4>
|
||||
|
||||
@@ -8,7 +8,7 @@ git-blame - Show what revision and author last modified each line of a file
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git-blame' [-c] [-l] [-t] [-f] [-n] [-p] [-L n,m] [-S <revs-file>]
|
||||
'git-blame' [-c] [-l] [-t] [-f] [-n] [-p] [--incremental] [-L n,m] [-S <revs-file>]
|
||||
[-M] [-C] [-C] [--since=<date>] [<rev>] [--] <file>
|
||||
|
||||
DESCRIPTION
|
||||
@@ -63,6 +63,10 @@ OPTIONS
|
||||
-p, --porcelain::
|
||||
Show in a format designed for machine consumption.
|
||||
|
||||
--incremental::
|
||||
Show the result incrementally in a format designed for
|
||||
machine consumption.
|
||||
|
||||
-M::
|
||||
Detect moving lines in the file as well. When a commit
|
||||
moves a block of lines in a file (e.g. the original file
|
||||
@@ -158,6 +162,47 @@ parents, using `commit{caret}!` notation:
|
||||
git blame -C -C -f $commit^! -- foo
|
||||
|
||||
|
||||
INCREMENTAL OUTPUT
|
||||
------------------
|
||||
|
||||
When called with `--incremental` option, the command outputs the
|
||||
result as it is built. The output generally will talk about
|
||||
lines touched by more recent commits first (i.e. the lines will
|
||||
be annotated out of order) and is meant to be used by
|
||||
interactive viewers.
|
||||
|
||||
The output format is similar to the Porcelain format, but it
|
||||
does not contain the actual lines from the file that is being
|
||||
annotated.
|
||||
|
||||
. Each blame entry always starts with a line of:
|
||||
|
||||
<40-byte hex sha1> <sourceline> <resultline> <num_lines>
|
||||
+
|
||||
Line numbers count from 1.
|
||||
|
||||
. The first time that commit shows up in the stream, it has various
|
||||
other information about it printed out with a one-word tag at the
|
||||
beginning of each line about that "extended commit info" (author,
|
||||
email, committer, dates, summary etc).
|
||||
|
||||
. Unlike Porcelain format, the filename information is always
|
||||
given and terminates the entry:
|
||||
|
||||
"filename" <whitespace-quoted-filename-goes-here>
|
||||
+
|
||||
and thus it's really quite easy to parse for some line- and word-oriented
|
||||
parser (which should be quite natural for most scripting languages).
|
||||
+
|
||||
[NOTE]
|
||||
For people who do parsing: to make it more robust, just ignore any
|
||||
lines in between the first and last one ("<sha1>" and "filename" lines)
|
||||
where you don't recognize the tag-words (or care about that particular
|
||||
one) at the beginning of the "extended information" lines. That way, if
|
||||
there is ever added information (like the commit encoding or extended
|
||||
commit commentary), a blame viewer won't ever care.
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
gitlink:git-annotate[1]
|
||||
|
||||
227
Documentation/git-config.txt
Normal file
227
Documentation/git-config.txt
Normal file
@@ -0,0 +1,227 @@
|
||||
git-config(1)
|
||||
=============
|
||||
|
||||
NAME
|
||||
----
|
||||
git-config - Get and set repository or global options
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git-config' [--global] [type] name [value [value_regex]]
|
||||
'git-config' [--global] [type] --add name value
|
||||
'git-config' [--global] [type] --replace-all name [value [value_regex]]
|
||||
'git-config' [--global] [type] --get name [value_regex]
|
||||
'git-config' [--global] [type] --get-all name [value_regex]
|
||||
'git-config' [--global] [type] --unset name [value_regex]
|
||||
'git-config' [--global] [type] --unset-all name [value_regex]
|
||||
'git-config' [--global] -l | --list
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
You can query/set/replace/unset options with this command. The name is
|
||||
actually the section and the key separated by a dot, and the value will be
|
||||
escaped.
|
||||
|
||||
Multiple lines can be added to an option by using the '--add' option.
|
||||
If you want to update or unset an option which can occur on multiple
|
||||
lines, a POSIX regexp `value_regex` needs to be given. Only the
|
||||
existing values that match the regexp are updated or unset. If
|
||||
you want to handle the lines that do *not* match the regex, just
|
||||
prepend a single exclamation mark in front (see EXAMPLES).
|
||||
|
||||
The type specifier can be either '--int' or '--bool', which will make
|
||||
'git-config' ensure that the variable(s) are of the given type and
|
||||
convert the value to the canonical form (simple decimal number for int,
|
||||
a "true" or "false" string for bool). If no type specifier is passed,
|
||||
no checks or transformations are performed on the value.
|
||||
|
||||
This command will fail if:
|
||||
|
||||
. The .git/config file is invalid,
|
||||
. Can not write to .git/config,
|
||||
. no section was provided,
|
||||
. the section or key is invalid,
|
||||
. you try to unset an option which does not exist,
|
||||
. you try to unset/set an option for which multiple lines match, or
|
||||
. you use --global option without $HOME being properly set.
|
||||
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
|
||||
--replace-all::
|
||||
Default behavior is to replace at most one line. This replaces
|
||||
all lines matching the key (and optionally the value_regex).
|
||||
|
||||
--add::
|
||||
Adds a new line to the option without altering any existing
|
||||
values. This is the same as providing '^$' as the value_regex.
|
||||
|
||||
--get::
|
||||
Get the value for a given key (optionally filtered by a regex
|
||||
matching the value). Returns error code 1 if the key was not
|
||||
found and error code 2 if multiple key values were found.
|
||||
|
||||
--get-all::
|
||||
Like get, but does not fail if the number of values for the key
|
||||
is not exactly one.
|
||||
|
||||
--get-regexp::
|
||||
Like --get-all, but interprets the name as a regular expression.
|
||||
|
||||
--global::
|
||||
Use global ~/.gitconfig file rather than the repository .git/config.
|
||||
|
||||
--unset::
|
||||
Remove the line matching the key from config file.
|
||||
|
||||
--unset-all::
|
||||
Remove all matching lines from config file.
|
||||
|
||||
-l, --list::
|
||||
List all variables set in config file.
|
||||
|
||||
--bool::
|
||||
git-config will ensure that the output is "true" or "false"
|
||||
|
||||
--int::
|
||||
git-config will ensure that the output is a simple
|
||||
decimal number. An optional value suffix of 'k', 'm', or 'g'
|
||||
in the config file will cause the value to be multiplied
|
||||
by 1024, 1048576, or 1073741824 prior to output.
|
||||
|
||||
|
||||
ENVIRONMENT
|
||||
-----------
|
||||
|
||||
GIT_CONFIG::
|
||||
Take the configuration from the given file instead of .git/config.
|
||||
Using the "--global" option forces this to ~/.gitconfig.
|
||||
|
||||
GIT_CONFIG_LOCAL::
|
||||
Currently the same as $GIT_CONFIG; when Git will support global
|
||||
configuration files, this will cause it to take the configuration
|
||||
from the global configuration file in addition to the given file.
|
||||
|
||||
|
||||
EXAMPLE
|
||||
-------
|
||||
|
||||
Given a .git/config like this:
|
||||
|
||||
#
|
||||
# This is the config file, and
|
||||
# a '#' or ';' character indicates
|
||||
# a comment
|
||||
#
|
||||
|
||||
; core variables
|
||||
[core]
|
||||
; Don't trust file modes
|
||||
filemode = false
|
||||
|
||||
; Our diff algorithm
|
||||
[diff]
|
||||
external = "/usr/local/bin/gnu-diff -u"
|
||||
renames = true
|
||||
|
||||
; Proxy settings
|
||||
[core]
|
||||
gitproxy="ssh" for "ssh://kernel.org/"
|
||||
gitproxy="proxy-command" for kernel.org
|
||||
gitproxy="myprotocol-command" for "my://"
|
||||
gitproxy=default-proxy ; for all the rest
|
||||
|
||||
you can set the filemode to true with
|
||||
|
||||
------------
|
||||
% git config core.filemode true
|
||||
------------
|
||||
|
||||
The hypothetical proxy command entries actually have a postfix to discern
|
||||
what URL they apply to. Here is how to change the entry for kernel.org
|
||||
to "ssh".
|
||||
|
||||
------------
|
||||
% git config core.gitproxy '"ssh" for kernel.org' 'for kernel.org$'
|
||||
------------
|
||||
|
||||
This makes sure that only the key/value pair for kernel.org is replaced.
|
||||
|
||||
To delete the entry for renames, do
|
||||
|
||||
------------
|
||||
% git config --unset diff.renames
|
||||
------------
|
||||
|
||||
If you want to delete an entry for a multivar (like core.gitproxy above),
|
||||
you have to provide a regex matching the value of exactly one line.
|
||||
|
||||
To query the value for a given key, do
|
||||
|
||||
------------
|
||||
% git config --get core.filemode
|
||||
------------
|
||||
|
||||
or
|
||||
|
||||
------------
|
||||
% git config core.filemode
|
||||
------------
|
||||
|
||||
or, to query a multivar:
|
||||
|
||||
------------
|
||||
% git config --get core.gitproxy "for kernel.org$"
|
||||
------------
|
||||
|
||||
If you want to know all the values for a multivar, do:
|
||||
|
||||
------------
|
||||
% git config --get-all core.gitproxy
|
||||
------------
|
||||
|
||||
If you like to live dangerous, you can replace *all* core.gitproxy by a
|
||||
new one with
|
||||
|
||||
------------
|
||||
% git config --replace-all core.gitproxy ssh
|
||||
------------
|
||||
|
||||
However, if you really only want to replace the line for the default proxy,
|
||||
i.e. the one without a "for ..." postfix, do something like this:
|
||||
|
||||
------------
|
||||
% git config core.gitproxy ssh '! for '
|
||||
------------
|
||||
|
||||
To actually match only values with an exclamation mark, you have to
|
||||
|
||||
------------
|
||||
% git config section.key value '[!]'
|
||||
------------
|
||||
|
||||
To add a new proxy, without altering any of the existing ones, use
|
||||
|
||||
------------
|
||||
% git config core.gitproxy '"proxy" for example.com'
|
||||
------------
|
||||
|
||||
|
||||
include::config.txt[]
|
||||
|
||||
|
||||
Author
|
||||
------
|
||||
Written by Johannes Schindelin <Johannes.Schindelin@gmx.de>
|
||||
|
||||
Documentation
|
||||
--------------
|
||||
Documentation by Johannes Schindelin, Petr Baudis and the git-list <git@vger.kernel.org>.
|
||||
|
||||
GIT
|
||||
---
|
||||
Part of the gitlink:git[7] suite
|
||||
|
||||
@@ -7,7 +7,7 @@ git-for-each-ref - Output information on each ref
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
'git-for-each-ref' [--count=<count>]\* [--shell|--perl|--python] [--sort=<key>]\* [--format=<format>] [<pattern>]
|
||||
'git-for-each-ref' [--count=<count>]\* [--shell|--perl|--python|--tcl] [--sort=<key>]\* [--format=<format>] [<pattern>]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
@@ -49,7 +49,7 @@ OPTIONS
|
||||
using fnmatch(3). Refs that do not match the pattern
|
||||
are not shown.
|
||||
|
||||
--shell, --perl, --python::
|
||||
--shell, --perl, --python, --tcl::
|
||||
If given, strings that substitute `%(fieldname)`
|
||||
placeholders are quoted as string literals suitable for
|
||||
the specified host language. This is meant to produce
|
||||
|
||||
@@ -8,132 +8,10 @@ git-fsck-objects - Verifies the connectivity and validity of the objects in the
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git-fsck-objects' [--tags] [--root] [--unreachable] [--cache]
|
||||
[--full] [--strict] [<object>*]
|
||||
'git-fsck-objects' ...
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
Verifies the connectivity and validity of the objects in the database.
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
<object>::
|
||||
An object to treat as the head of an unreachability trace.
|
||||
+
|
||||
If no objects are given, git-fsck-objects defaults to using the
|
||||
index file and all SHA1 references in .git/refs/* as heads.
|
||||
|
||||
--unreachable::
|
||||
Print out objects that exist but that aren't readable from any
|
||||
of the reference nodes.
|
||||
|
||||
--root::
|
||||
Report root nodes.
|
||||
|
||||
--tags::
|
||||
Report tags.
|
||||
|
||||
--cache::
|
||||
Consider any object recorded in the index also as a head node for
|
||||
an unreachability trace.
|
||||
|
||||
--full::
|
||||
Check not just objects in GIT_OBJECT_DIRECTORY
|
||||
($GIT_DIR/objects), but also the ones found in alternate
|
||||
object pools listed in GIT_ALTERNATE_OBJECT_DIRECTORIES
|
||||
or $GIT_DIR/objects/info/alternates,
|
||||
and in packed git archives found in $GIT_DIR/objects/pack
|
||||
and corresponding pack subdirectories in alternate
|
||||
object pools.
|
||||
|
||||
--strict::
|
||||
Enable more strict checking, namely to catch a file mode
|
||||
recorded with g+w bit set, which was created by older
|
||||
versions of git. Existing repositories, including the
|
||||
Linux kernel, git itself, and sparse repository have old
|
||||
objects that triggers this check, but it is recommended
|
||||
to check new projects with this flag.
|
||||
|
||||
It tests SHA1 and general object sanity, and it does full tracking of
|
||||
the resulting reachability and everything else. It prints out any
|
||||
corruption it finds (missing or bad objects), and if you use the
|
||||
'--unreachable' flag it will also print out objects that exist but
|
||||
that aren't readable from any of the specified head nodes.
|
||||
|
||||
So for example
|
||||
|
||||
git-fsck-objects --unreachable HEAD $(cat .git/refs/heads/*)
|
||||
|
||||
will do quite a _lot_ of verification on the tree. There are a few
|
||||
extra validity tests to be added (make sure that tree objects are
|
||||
sorted properly etc), but on the whole if "git-fsck-objects" is happy, you
|
||||
do have a valid tree.
|
||||
|
||||
Any corrupt objects you will have to find in backups or other archives
|
||||
(i.e., you can just remove them and do an "rsync" with some other site in
|
||||
the hopes that somebody else has the object you have corrupted).
|
||||
|
||||
Of course, "valid tree" doesn't mean that it wasn't generated by some
|
||||
evil person, and the end result might be crap. git is a revision
|
||||
tracking system, not a quality assurance system ;)
|
||||
|
||||
Extracted Diagnostics
|
||||
---------------------
|
||||
|
||||
expect dangling commits - potential heads - due to lack of head information::
|
||||
You haven't specified any nodes as heads so it won't be
|
||||
possible to differentiate between un-parented commits and
|
||||
root nodes.
|
||||
|
||||
missing sha1 directory '<dir>'::
|
||||
The directory holding the sha1 objects is missing.
|
||||
|
||||
unreachable <type> <object>::
|
||||
The <type> object <object>, isn't actually referred to directly
|
||||
or indirectly in any of the trees or commits seen. This can
|
||||
mean that there's another root node that you're not specifying
|
||||
or that the tree is corrupt. If you haven't missed a root node
|
||||
then you might as well delete unreachable nodes since they
|
||||
can't be used.
|
||||
|
||||
missing <type> <object>::
|
||||
The <type> object <object>, is referred to but isn't present in
|
||||
the database.
|
||||
|
||||
dangling <type> <object>::
|
||||
The <type> object <object>, is present in the database but never
|
||||
'directly' used. A dangling commit could be a root node.
|
||||
|
||||
warning: git-fsck-objects: tree <tree> has full pathnames in it::
|
||||
And it shouldn't...
|
||||
|
||||
sha1 mismatch <object>::
|
||||
The database has an object who's sha1 doesn't match the
|
||||
database value.
|
||||
This indicates a serious data integrity problem.
|
||||
|
||||
Environment Variables
|
||||
---------------------
|
||||
|
||||
GIT_OBJECT_DIRECTORY::
|
||||
used to specify the object database root (usually $GIT_DIR/objects)
|
||||
|
||||
GIT_INDEX_FILE::
|
||||
used to specify the index file of the index
|
||||
|
||||
GIT_ALTERNATE_OBJECT_DIRECTORIES::
|
||||
used to specify additional object database roots (usually unset)
|
||||
|
||||
Author
|
||||
------
|
||||
Written by Linus Torvalds <torvalds@osdl.org>
|
||||
|
||||
Documentation
|
||||
--------------
|
||||
Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
|
||||
|
||||
GIT
|
||||
---
|
||||
Part of the gitlink:git[7] suite
|
||||
|
||||
This is a synonym for gitlink:git-fsck[1]. Please refer to the
|
||||
documentation of that command.
|
||||
|
||||
139
Documentation/git-fsck.txt
Normal file
139
Documentation/git-fsck.txt
Normal file
@@ -0,0 +1,139 @@
|
||||
git-fsck(1)
|
||||
===========
|
||||
|
||||
NAME
|
||||
----
|
||||
git-fsck - Verifies the connectivity and validity of the objects in the database
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git-fsck' [--tags] [--root] [--unreachable] [--cache]
|
||||
[--full] [--strict] [<object>*]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
Verifies the connectivity and validity of the objects in the database.
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
<object>::
|
||||
An object to treat as the head of an unreachability trace.
|
||||
+
|
||||
If no objects are given, git-fsck defaults to using the
|
||||
index file and all SHA1 references in .git/refs/* as heads.
|
||||
|
||||
--unreachable::
|
||||
Print out objects that exist but that aren't readable from any
|
||||
of the reference nodes.
|
||||
|
||||
--root::
|
||||
Report root nodes.
|
||||
|
||||
--tags::
|
||||
Report tags.
|
||||
|
||||
--cache::
|
||||
Consider any object recorded in the index also as a head node for
|
||||
an unreachability trace.
|
||||
|
||||
--full::
|
||||
Check not just objects in GIT_OBJECT_DIRECTORY
|
||||
($GIT_DIR/objects), but also the ones found in alternate
|
||||
object pools listed in GIT_ALTERNATE_OBJECT_DIRECTORIES
|
||||
or $GIT_DIR/objects/info/alternates,
|
||||
and in packed git archives found in $GIT_DIR/objects/pack
|
||||
and corresponding pack subdirectories in alternate
|
||||
object pools.
|
||||
|
||||
--strict::
|
||||
Enable more strict checking, namely to catch a file mode
|
||||
recorded with g+w bit set, which was created by older
|
||||
versions of git. Existing repositories, including the
|
||||
Linux kernel, git itself, and sparse repository have old
|
||||
objects that triggers this check, but it is recommended
|
||||
to check new projects with this flag.
|
||||
|
||||
It tests SHA1 and general object sanity, and it does full tracking of
|
||||
the resulting reachability and everything else. It prints out any
|
||||
corruption it finds (missing or bad objects), and if you use the
|
||||
'--unreachable' flag it will also print out objects that exist but
|
||||
that aren't readable from any of the specified head nodes.
|
||||
|
||||
So for example
|
||||
|
||||
git-fsck --unreachable HEAD $(cat .git/refs/heads/*)
|
||||
|
||||
will do quite a _lot_ of verification on the tree. There are a few
|
||||
extra validity tests to be added (make sure that tree objects are
|
||||
sorted properly etc), but on the whole if "git-fsck" is happy, you
|
||||
do have a valid tree.
|
||||
|
||||
Any corrupt objects you will have to find in backups or other archives
|
||||
(i.e., you can just remove them and do an "rsync" with some other site in
|
||||
the hopes that somebody else has the object you have corrupted).
|
||||
|
||||
Of course, "valid tree" doesn't mean that it wasn't generated by some
|
||||
evil person, and the end result might be crap. git is a revision
|
||||
tracking system, not a quality assurance system ;)
|
||||
|
||||
Extracted Diagnostics
|
||||
---------------------
|
||||
|
||||
expect dangling commits - potential heads - due to lack of head information::
|
||||
You haven't specified any nodes as heads so it won't be
|
||||
possible to differentiate between un-parented commits and
|
||||
root nodes.
|
||||
|
||||
missing sha1 directory '<dir>'::
|
||||
The directory holding the sha1 objects is missing.
|
||||
|
||||
unreachable <type> <object>::
|
||||
The <type> object <object>, isn't actually referred to directly
|
||||
or indirectly in any of the trees or commits seen. This can
|
||||
mean that there's another root node that you're not specifying
|
||||
or that the tree is corrupt. If you haven't missed a root node
|
||||
then you might as well delete unreachable nodes since they
|
||||
can't be used.
|
||||
|
||||
missing <type> <object>::
|
||||
The <type> object <object>, is referred to but isn't present in
|
||||
the database.
|
||||
|
||||
dangling <type> <object>::
|
||||
The <type> object <object>, is present in the database but never
|
||||
'directly' used. A dangling commit could be a root node.
|
||||
|
||||
warning: git-fsck: tree <tree> has full pathnames in it::
|
||||
And it shouldn't...
|
||||
|
||||
sha1 mismatch <object>::
|
||||
The database has an object who's sha1 doesn't match the
|
||||
database value.
|
||||
This indicates a serious data integrity problem.
|
||||
|
||||
Environment Variables
|
||||
---------------------
|
||||
|
||||
GIT_OBJECT_DIRECTORY::
|
||||
used to specify the object database root (usually $GIT_DIR/objects)
|
||||
|
||||
GIT_INDEX_FILE::
|
||||
used to specify the index file of the index
|
||||
|
||||
GIT_ALTERNATE_OBJECT_DIRECTORIES::
|
||||
used to specify additional object database roots (usually unset)
|
||||
|
||||
Author
|
||||
------
|
||||
Written by Linus Torvalds <torvalds@osdl.org>
|
||||
|
||||
Documentation
|
||||
--------------
|
||||
Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
|
||||
|
||||
GIT
|
||||
---
|
||||
Part of the gitlink:git[7] suite
|
||||
|
||||
@@ -21,7 +21,7 @@ given will be ignored when checking which packs are required. This makes the
|
||||
following command useful when wanting to remove packs which contain unreachable
|
||||
objects.
|
||||
|
||||
git-fsck-objects --full --unreachable | cut -d ' ' -f3 | \
|
||||
git-fsck --full --unreachable | cut -d ' ' -f3 | \
|
||||
git-pack-redundant --all | xargs rm
|
||||
|
||||
OPTIONS
|
||||
|
||||
@@ -13,7 +13,7 @@ SYNOPSIS
|
||||
DESCRIPTION
|
||||
-----------
|
||||
|
||||
This runs `git-fsck-objects --unreachable` using all the refs
|
||||
This runs `git-fsck --unreachable` using all the refs
|
||||
available in `$GIT_DIR/refs`, optionally with additional set of
|
||||
objects specified on the command line, and prunes all
|
||||
objects unreachable from any of these head objects from the object database.
|
||||
|
||||
@@ -42,7 +42,7 @@ git pull, git pull origin::
|
||||
current branch. Normally the branch merged in is
|
||||
the HEAD of the remote repository, but the choice is
|
||||
determined by the branch.<name>.remote and
|
||||
branch.<name>.merge options; see gitlink:git-repo-config[1]
|
||||
branch.<name>.merge options; see gitlink:git-config[1]
|
||||
for details.
|
||||
|
||||
git pull origin next::
|
||||
@@ -94,7 +94,7 @@ gitlink:git-reset[1].
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
gitlink:git-fetch[1], gitlink:git-merge[1], gitlink:git-repo-config[1]
|
||||
gitlink:git-fetch[1], gitlink:git-merge[1], gitlink:git-config[1]
|
||||
|
||||
|
||||
Author
|
||||
|
||||
@@ -28,7 +28,7 @@ In the third form, gives some information about the remote <name>.
|
||||
|
||||
The remote configuration is achieved using the `remote.origin.url` and
|
||||
`remote.origin.fetch` configuration variables. (See
|
||||
gitlink:git-repo-config[1]).
|
||||
gitlink:git-config[1]).
|
||||
|
||||
Examples
|
||||
--------
|
||||
@@ -58,7 +58,7 @@ See Also
|
||||
--------
|
||||
gitlink:git-fetch[1]
|
||||
gitlink:git-branch[1]
|
||||
gitlink:git-repo-config[1]
|
||||
gitlink:git-config[1]
|
||||
|
||||
Author
|
||||
------
|
||||
|
||||
@@ -8,220 +8,11 @@ git-repo-config - Get and set repository or global options
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git-repo-config' [--global] [type] name [value [value_regex]]
|
||||
'git-repo-config' [--global] [type] --add name value
|
||||
'git-repo-config' [--global] [type] --replace-all name [value [value_regex]]
|
||||
'git-repo-config' [--global] [type] --get name [value_regex]
|
||||
'git-repo-config' [--global] [type] --get-all name [value_regex]
|
||||
'git-repo-config' [--global] [type] --unset name [value_regex]
|
||||
'git-repo-config' [--global] [type] --unset-all name [value_regex]
|
||||
'git-repo-config' [--global] -l | --list
|
||||
'git-repo-config' ...
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
You can query/set/replace/unset options with this command. The name is
|
||||
actually the section and the key separated by a dot, and the value will be
|
||||
escaped.
|
||||
|
||||
Multiple lines can be added to an option by using the '--add' option.
|
||||
If you want to update or unset an option which can occur on multiple
|
||||
lines, a POSIX regexp `value_regex` needs to be given. Only the
|
||||
existing values that match the regexp are updated or unset. If
|
||||
you want to handle the lines that do *not* match the regex, just
|
||||
prepend a single exclamation mark in front (see EXAMPLES).
|
||||
|
||||
The type specifier can be either '--int' or '--bool', which will make
|
||||
'git-repo-config' ensure that the variable(s) are of the given type and
|
||||
convert the value to the canonical form (simple decimal number for int,
|
||||
a "true" or "false" string for bool). If no type specifier is passed,
|
||||
no checks or transformations are performed on the value.
|
||||
|
||||
This command will fail if:
|
||||
|
||||
. The .git/config file is invalid,
|
||||
. Can not write to .git/config,
|
||||
. no section was provided,
|
||||
. the section or key is invalid,
|
||||
. you try to unset an option which does not exist,
|
||||
. you try to unset/set an option for which multiple lines match, or
|
||||
. you use --global option without $HOME being properly set.
|
||||
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
|
||||
--replace-all::
|
||||
Default behavior is to replace at most one line. This replaces
|
||||
all lines matching the key (and optionally the value_regex).
|
||||
|
||||
--add::
|
||||
Adds a new line to the option without altering any existing
|
||||
values. This is the same as providing '^$' as the value_regex.
|
||||
|
||||
--get::
|
||||
Get the value for a given key (optionally filtered by a regex
|
||||
matching the value). Returns error code 1 if the key was not
|
||||
found and error code 2 if multiple key values were found.
|
||||
|
||||
--get-all::
|
||||
Like get, but does not fail if the number of values for the key
|
||||
is not exactly one.
|
||||
|
||||
--get-regexp::
|
||||
Like --get-all, but interprets the name as a regular expression.
|
||||
|
||||
--global::
|
||||
Use global ~/.gitconfig file rather than the repository .git/config.
|
||||
|
||||
--unset::
|
||||
Remove the line matching the key from config file.
|
||||
|
||||
--unset-all::
|
||||
Remove all matching lines from config file.
|
||||
|
||||
-l, --list::
|
||||
List all variables set in config file.
|
||||
|
||||
--bool::
|
||||
git-repo-config will ensure that the output is "true" or "false"
|
||||
|
||||
--int::
|
||||
git-repo-config will ensure that the output is a simple
|
||||
decimal number. An optional value suffix of 'k', 'm', or 'g'
|
||||
in the config file will cause the value to be multiplied
|
||||
by 1024, 1048576, or 1073741824 prior to output.
|
||||
|
||||
|
||||
ENVIRONMENT
|
||||
-----------
|
||||
|
||||
GIT_CONFIG::
|
||||
Take the configuration from the given file instead of .git/config.
|
||||
Using the "--global" option forces this to ~/.gitconfig.
|
||||
|
||||
GIT_CONFIG_LOCAL::
|
||||
Currently the same as $GIT_CONFIG; when Git will support global
|
||||
configuration files, this will cause it to take the configuration
|
||||
from the global configuration file in addition to the given file.
|
||||
|
||||
|
||||
EXAMPLE
|
||||
-------
|
||||
|
||||
Given a .git/config like this:
|
||||
|
||||
#
|
||||
# This is the config file, and
|
||||
# a '#' or ';' character indicates
|
||||
# a comment
|
||||
#
|
||||
|
||||
; core variables
|
||||
[core]
|
||||
; Don't trust file modes
|
||||
filemode = false
|
||||
|
||||
; Our diff algorithm
|
||||
[diff]
|
||||
external = "/usr/local/bin/gnu-diff -u"
|
||||
renames = true
|
||||
|
||||
; Proxy settings
|
||||
[core]
|
||||
gitproxy="ssh" for "ssh://kernel.org/"
|
||||
gitproxy="proxy-command" for kernel.org
|
||||
gitproxy="myprotocol-command" for "my://"
|
||||
gitproxy=default-proxy ; for all the rest
|
||||
|
||||
you can set the filemode to true with
|
||||
|
||||
------------
|
||||
% git repo-config core.filemode true
|
||||
------------
|
||||
|
||||
The hypothetical proxy command entries actually have a postfix to discern
|
||||
what URL they apply to. Here is how to change the entry for kernel.org
|
||||
to "ssh".
|
||||
|
||||
------------
|
||||
% git repo-config core.gitproxy '"ssh" for kernel.org' 'for kernel.org$'
|
||||
------------
|
||||
|
||||
This makes sure that only the key/value pair for kernel.org is replaced.
|
||||
|
||||
To delete the entry for renames, do
|
||||
|
||||
------------
|
||||
% git repo-config --unset diff.renames
|
||||
------------
|
||||
|
||||
If you want to delete an entry for a multivar (like core.gitproxy above),
|
||||
you have to provide a regex matching the value of exactly one line.
|
||||
|
||||
To query the value for a given key, do
|
||||
|
||||
------------
|
||||
% git repo-config --get core.filemode
|
||||
------------
|
||||
|
||||
or
|
||||
|
||||
------------
|
||||
% git repo-config core.filemode
|
||||
------------
|
||||
|
||||
or, to query a multivar:
|
||||
|
||||
------------
|
||||
% git repo-config --get core.gitproxy "for kernel.org$"
|
||||
------------
|
||||
|
||||
If you want to know all the values for a multivar, do:
|
||||
|
||||
------------
|
||||
% git repo-config --get-all core.gitproxy
|
||||
------------
|
||||
|
||||
If you like to live dangerous, you can replace *all* core.gitproxy by a
|
||||
new one with
|
||||
|
||||
------------
|
||||
% git repo-config --replace-all core.gitproxy ssh
|
||||
------------
|
||||
|
||||
However, if you really only want to replace the line for the default proxy,
|
||||
i.e. the one without a "for ..." postfix, do something like this:
|
||||
|
||||
------------
|
||||
% git repo-config core.gitproxy ssh '! for '
|
||||
------------
|
||||
|
||||
To actually match only values with an exclamation mark, you have to
|
||||
|
||||
------------
|
||||
% git repo-config section.key value '[!]'
|
||||
------------
|
||||
|
||||
To add a new proxy, without altering any of the existing ones, use
|
||||
|
||||
------------
|
||||
% git repo-config core.gitproxy '"proxy" for example.com'
|
||||
------------
|
||||
|
||||
|
||||
include::config.txt[]
|
||||
|
||||
|
||||
Author
|
||||
------
|
||||
Written by Johannes Schindelin <Johannes.Schindelin@gmx.de>
|
||||
|
||||
Documentation
|
||||
--------------
|
||||
Documentation by Johannes Schindelin, Petr Baudis and the git-list <git@vger.kernel.org>.
|
||||
|
||||
GIT
|
||||
---
|
||||
Part of the gitlink:git[7] suite
|
||||
|
||||
This is a synonym for gitlink:git-config[1]. Please refer to the
|
||||
documentation of that command.
|
||||
|
||||
@@ -204,7 +204,7 @@ removed by default if there are no files left in them. git
|
||||
cannot version empty directories. Enabling this flag will make
|
||||
the commit to SVN act like git.
|
||||
|
||||
repo-config key: svn.rmdir
|
||||
config key: svn.rmdir
|
||||
|
||||
-e::
|
||||
--edit::
|
||||
@@ -215,7 +215,7 @@ Edit the commit message before committing to SVN. This is off by
|
||||
default for objects that are commits, and forced on when committing
|
||||
tree objects.
|
||||
|
||||
repo-config key: svn.edit
|
||||
config key: svn.edit
|
||||
|
||||
-l<num>::
|
||||
--find-copies-harder::
|
||||
@@ -226,8 +226,8 @@ They are both passed directly to git-diff-tree see
|
||||
gitlink:git-diff-tree[1] for more information.
|
||||
|
||||
[verse]
|
||||
repo-config key: svn.l
|
||||
repo-config key: svn.findcopiesharder
|
||||
config key: svn.l
|
||||
config key: svn.findcopiesharder
|
||||
|
||||
-A<filename>::
|
||||
--authors-file=<filename>::
|
||||
@@ -245,7 +245,7 @@ will abort operation. The user will then have to add the
|
||||
appropriate entry. Re-running the previous git-svn command
|
||||
after the authors-file is modified should continue operation.
|
||||
|
||||
repo-config key: svn.authorsfile
|
||||
config key: svn.authorsfile
|
||||
|
||||
-q::
|
||||
--quiet::
|
||||
@@ -262,8 +262,8 @@ repo-config key: svn.authorsfile
|
||||
|
||||
--repack-flags are passed directly to gitlink:git-repack[1].
|
||||
|
||||
repo-config key: svn.repack
|
||||
repo-config key: svn.repackflags
|
||||
config key: svn.repack
|
||||
config key: svn.repackflags
|
||||
|
||||
-m::
|
||||
--merge::
|
||||
@@ -304,7 +304,7 @@ used to track branches across multiple SVN _repositories_.
|
||||
This option may be specified multiple times, once for each
|
||||
branch.
|
||||
|
||||
repo-config key: svn.branch
|
||||
config key: svn.branch
|
||||
|
||||
-i<GIT_SVN_ID>::
|
||||
--id <GIT_SVN_ID>::
|
||||
@@ -320,7 +320,7 @@ for more information on using GIT_SVN_ID.
|
||||
started tracking a branch and never tracked the trunk it was
|
||||
descended from.
|
||||
|
||||
repo-config key: svn.followparent
|
||||
config key: svn.followparent
|
||||
|
||||
--no-metadata::
|
||||
This gets rid of the git-svn-id: lines at the end of every commit.
|
||||
@@ -332,7 +332,7 @@ repo-config key: svn.followparent
|
||||
The 'git-svn log' command will not work on repositories using this,
|
||||
either.
|
||||
|
||||
repo-config key: svn.nometadata
|
||||
config key: svn.nometadata
|
||||
|
||||
--
|
||||
|
||||
|
||||
@@ -289,7 +289,7 @@ Configuration
|
||||
|
||||
The command honors `core.filemode` configuration variable. If
|
||||
your repository is on an filesystem whose executable bits are
|
||||
unreliable, this should be set to 'false' (see gitlink:git-repo-config[1]).
|
||||
unreliable, this should be set to 'false' (see gitlink:git-config[1]).
|
||||
This causes the command to ignore differences in file modes recorded
|
||||
in the index and the file mode on the filesystem if they differ only on
|
||||
executable bit. On such an unfortunate filesystem, you may
|
||||
@@ -301,7 +301,7 @@ The command looks at `core.ignorestat` configuration variable. See
|
||||
|
||||
See Also
|
||||
--------
|
||||
gitlink:git-repo-config[1]
|
||||
gitlink:git-config[1]
|
||||
|
||||
|
||||
Author
|
||||
|
||||
@@ -20,7 +20,7 @@ OPTIONS
|
||||
Cause the logical variables to be listed. In addition, all the
|
||||
variables of the git configuration file .git/config are listed
|
||||
as well. (However, the configuration variables listing functionality
|
||||
is deprecated in favor of `git-repo-config -l`.)
|
||||
is deprecated in favor of `git-config -l`.)
|
||||
|
||||
EXAMPLE
|
||||
--------
|
||||
@@ -49,7 +49,7 @@ See Also
|
||||
--------
|
||||
gitlink:git-commit-tree[1]
|
||||
gitlink:git-tag[1]
|
||||
gitlink:git-repo-config[1]
|
||||
gitlink:git-config[1]
|
||||
|
||||
Author
|
||||
------
|
||||
|
||||
@@ -24,7 +24,7 @@ link:everyday.html[Everyday Git] for a useful minimum set of commands, and
|
||||
also want to read link:cvs-migration.html[CVS migration].
|
||||
|
||||
The COMMAND is either a name of a Git command (see below) or an alias
|
||||
as defined in the configuration file (see gitlink:git-repo-config[1]).
|
||||
as defined in the configuration file (see gitlink:git-config[1]).
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
|
||||
@@ -205,7 +205,7 @@ To check whether all is OK, do:
|
||||
Now, add the remote in your existing repository which contains the project
|
||||
you want to export:
|
||||
|
||||
$ git-repo-config remote.upload.url \
|
||||
$ git-config remote.upload.url \
|
||||
http://<username>@<servername>/my-new-repo.git/
|
||||
|
||||
It is important to put the last '/'; Without it, the server will send
|
||||
@@ -222,7 +222,7 @@ From your client repository, do
|
||||
|
||||
This pushes branch 'master' (which is assumed to be the branch you
|
||||
want to export) to repository called 'upload', which we previously
|
||||
defined with git-repo-config.
|
||||
defined with git-config.
|
||||
|
||||
|
||||
Troubleshooting:
|
||||
|
||||
@@ -16,8 +16,8 @@ public email address before doing any operation. The easiest
|
||||
way to do so is:
|
||||
|
||||
------------------------------------------------
|
||||
$ git repo-config --global user.name "Your Name Comes Here"
|
||||
$ git repo-config --global user.email you@yourdomain.example.com
|
||||
$ git config --global user.name "Your Name Comes Here"
|
||||
$ git config --global user.email you@yourdomain.example.com
|
||||
------------------------------------------------
|
||||
|
||||
|
||||
@@ -353,12 +353,12 @@ repository in the repository configuration, and that location is
|
||||
used for pulls:
|
||||
|
||||
-------------------------------------
|
||||
$ git repo-config --get remote.origin.url
|
||||
$ git config --get remote.origin.url
|
||||
/home/bob/myrepo
|
||||
-------------------------------------
|
||||
|
||||
(The complete configuration created by git-clone is visible using
|
||||
"git repo-config -l", and the gitlink:git-repo-config[1] man page
|
||||
"git config -l", and the gitlink:git-config[1] man page
|
||||
explains the meaning of each option.)
|
||||
|
||||
Git also keeps a pristine copy of Alice's master branch under the
|
||||
|
||||
7
Makefile
7
Makefile
@@ -192,7 +192,7 @@ SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
|
||||
|
||||
# ... and all the rest that could be moved out of bindir to gitexecdir
|
||||
PROGRAMS = \
|
||||
git-convert-objects$X git-fetch-pack$X git-fsck-objects$X \
|
||||
git-convert-objects$X git-fetch-pack$X git-fsck$X \
|
||||
git-hash-object$X git-index-pack$X git-local-fetch$X \
|
||||
git-daemon$X \
|
||||
git-merge-index$X git-mktag$X git-mktree$X git-patch-id$X \
|
||||
@@ -212,7 +212,8 @@ EXTRA_PROGRAMS =
|
||||
|
||||
BUILT_INS = \
|
||||
git-format-patch$X git-show$X git-whatchanged$X git-cherry$X \
|
||||
git-get-tar-commit-id$X git-init$X \
|
||||
git-get-tar-commit-id$X git-init$X git-repo-config$X \
|
||||
git-fsck-objects$X \
|
||||
$(patsubst builtin-%.o,git-%$X,$(BUILTIN_OBJS))
|
||||
|
||||
# what 'all' will build and 'install' will install, in gitexecdir
|
||||
@@ -299,7 +300,7 @@ BUILTIN_OBJS = \
|
||||
builtin-push.o \
|
||||
builtin-read-tree.o \
|
||||
builtin-reflog.o \
|
||||
builtin-repo-config.o \
|
||||
builtin-config.o \
|
||||
builtin-rerere.o \
|
||||
builtin-rev-list.o \
|
||||
builtin-rev-parse.o \
|
||||
|
||||
@@ -1780,6 +1780,9 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
|
||||
argv[unk++] = arg;
|
||||
}
|
||||
|
||||
if (!incremental)
|
||||
setup_pager();
|
||||
|
||||
if (!blame_move_score)
|
||||
blame_move_score = BLAME_DEFAULT_MOVE_SCORE;
|
||||
if (!blame_copy_score)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#include "cache.h"
|
||||
|
||||
static const char git_config_set_usage[] =
|
||||
"git-repo-config [ --global ] [ --bool | --int ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --list";
|
||||
"git-config [ --global ] [ --bool | --int ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --list";
|
||||
|
||||
static char *key;
|
||||
static regex_t *key_regexp;
|
||||
@@ -126,7 +126,7 @@ free_strings:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int cmd_repo_config(int argc, const char **argv, const char *prefix)
|
||||
int cmd_config(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int nongit = 0;
|
||||
setup_git_directory_gently(&nongit);
|
||||
@@ -12,6 +12,7 @@
|
||||
#define QUOTE_SHELL 1
|
||||
#define QUOTE_PERL 2
|
||||
#define QUOTE_PYTHON 3
|
||||
#define QUOTE_TCL 4
|
||||
|
||||
typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type;
|
||||
|
||||
@@ -723,6 +724,9 @@ static void print_value(struct refinfo *ref, int atom, int quote_style)
|
||||
case QUOTE_PYTHON:
|
||||
python_quote_print(stdout, v->s);
|
||||
break;
|
||||
case QUOTE_TCL:
|
||||
tcl_quote_print(stdout, v->s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -834,6 +838,12 @@ int cmd_for_each_ref(int ac, const char **av, char *prefix)
|
||||
quote_style = QUOTE_PYTHON;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(arg, "--tcl") ) {
|
||||
if (0 <= quote_style)
|
||||
die("more than one quoting style?");
|
||||
quote_style = QUOTE_TCL;
|
||||
continue;
|
||||
}
|
||||
if (!strncmp(arg, "--count=", 8)) {
|
||||
if (maxcount)
|
||||
die("more than one --count?");
|
||||
|
||||
@@ -54,7 +54,7 @@ extern int cmd_prune_packed(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_push(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_read_tree(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_reflog(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_repo_config(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_config(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_rerere(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_rev_list(int argc, const char **argv, const char *prefix);
|
||||
extern int cmd_rev_parse(int argc, const char **argv, const char *prefix);
|
||||
|
||||
10
contrib/blameview/README
Normal file
10
contrib/blameview/README
Normal file
@@ -0,0 +1,10 @@
|
||||
This is a sample program to use 'git-blame --incremental', based
|
||||
on this message.
|
||||
|
||||
From: Jeff King <peff@peff.net>
|
||||
Subject: Re: More precise tag following
|
||||
To: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
Cc: git@vger.kernel.org
|
||||
Date: Sat, 27 Jan 2007 18:52:38 -0500
|
||||
Message-ID: <20070127235238.GA28706@coredump.intra.peff.net>
|
||||
|
||||
118
contrib/blameview/blameview.perl
Executable file
118
contrib/blameview/blameview.perl
Executable file
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
use Gtk2 -init;
|
||||
use Gtk2::SimpleList;
|
||||
|
||||
my $fn = shift or die "require filename to blame";
|
||||
|
||||
Gtk2::Rc->parse_string(<<'EOS');
|
||||
style "treeview_style"
|
||||
{
|
||||
GtkTreeView::vertical-separator = 0
|
||||
}
|
||||
class "GtkTreeView" style "treeview_style"
|
||||
EOS
|
||||
|
||||
my $window = Gtk2::Window->new('toplevel');
|
||||
$window->signal_connect(destroy => sub { Gtk2->main_quit });
|
||||
my $scrolled_window = Gtk2::ScrolledWindow->new;
|
||||
$window->add($scrolled_window);
|
||||
my $fileview = Gtk2::SimpleList->new(
|
||||
'Commit' => 'text',
|
||||
'CommitInfo' => 'text',
|
||||
'FileLine' => 'text',
|
||||
'Data' => 'text'
|
||||
);
|
||||
$scrolled_window->add($fileview);
|
||||
$fileview->get_column(0)->set_spacing(0);
|
||||
$fileview->set_size_request(1024, 768);
|
||||
$fileview->set_rules_hint(1);
|
||||
|
||||
open(my $fh, '<', $fn)
|
||||
or die "unable to open $fn: $!";
|
||||
while(<$fh>) {
|
||||
chomp;
|
||||
$fileview->{data}->[$.] = ['HEAD', '?', "$fn:$.", $_];
|
||||
}
|
||||
|
||||
my $blame;
|
||||
open($blame, '-|', qw(git blame --incremental --), $fn)
|
||||
or die "cannot start git-blame $fn";
|
||||
|
||||
Glib::IO->add_watch(fileno($blame), 'in', \&read_blame_line);
|
||||
|
||||
$window->show_all;
|
||||
Gtk2->main;
|
||||
exit 0;
|
||||
|
||||
my %commitinfo = ();
|
||||
|
||||
sub flush_blame_line {
|
||||
my ($attr) = @_;
|
||||
|
||||
return unless defined $attr;
|
||||
|
||||
my ($commit, $s_lno, $lno, $cnt) =
|
||||
@{$attr}{qw(COMMIT S_LNO LNO CNT)};
|
||||
|
||||
my ($filename, $author, $author_time, $author_tz) =
|
||||
@{$commitinfo{$commit}}{qw(FILENAME AUTHOR AUTHOR-TIME AUTHOR-TZ)};
|
||||
my $info = $author . ' ' . format_time($author_time, $author_tz);
|
||||
|
||||
for(my $i = 0; $i < $cnt; $i++) {
|
||||
@{$fileview->{data}->[$lno+$i-1]}[0,1,2] =
|
||||
(substr($commit, 0, 8), $info,
|
||||
$filename . ':' . ($s_lno+$i));
|
||||
}
|
||||
}
|
||||
|
||||
my $buf;
|
||||
my $current;
|
||||
sub read_blame_line {
|
||||
|
||||
my $r = sysread($blame, $buf, 1024, length($buf));
|
||||
die "I/O error" unless defined $r;
|
||||
|
||||
if ($r == 0) {
|
||||
flush_blame_line($current);
|
||||
$current = undef;
|
||||
return 0;
|
||||
}
|
||||
|
||||
while ($buf =~ s/([^\n]*)\n//) {
|
||||
my $line = $1;
|
||||
|
||||
if (($commit, $s_lno, $lno, $cnt) =
|
||||
($line =~ /^([0-9a-f]{40}) (\d+) (\d+) (\d+)$/)) {
|
||||
flush_blame_line($current);
|
||||
$current = +{
|
||||
COMMIT => $1,
|
||||
S_LNO => $2,
|
||||
LNO => $3,
|
||||
CNT => $4,
|
||||
};
|
||||
next;
|
||||
}
|
||||
|
||||
# extended attribute values
|
||||
if ($line =~ /^(author|author-mail|author-time|author-tz|committer|committer-mail|committer-time|committer-tz|summary|filename) (.*)$/) {
|
||||
my $commit = $current->{COMMIT};
|
||||
$commitinfo{$commit}{uc($1)} = $2;
|
||||
next;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub format_time {
|
||||
my $time = shift;
|
||||
my $tz = shift;
|
||||
|
||||
my $minutes = $tz < 0 ? 0-$tz : $tz;
|
||||
$minutes = ($minutes / 100)*60 + ($minutes % 100);
|
||||
$minutes = $tz < 0 ? 0-$minutes : $minutes;
|
||||
$time += $minutes * 60;
|
||||
my @t = gmtime($time);
|
||||
return sprintf('%04d-%02d-%02d %02d:%02d:%02d %s',
|
||||
$t[5] + 1900, @t[4,3,2,1,0], $tz);
|
||||
}
|
||||
@@ -145,7 +145,7 @@ __git_remotes ()
|
||||
echo ${i#$d/remotes/}
|
||||
done
|
||||
[ "$ngoff" ] && shopt -u nullglob
|
||||
for i in $(git --git-dir="$d" repo-config --list); do
|
||||
for i in $(git --git-dir="$d" config --list); do
|
||||
case "$i" in
|
||||
remote.*.url=*)
|
||||
i="${i#remote.}"
|
||||
@@ -286,7 +286,7 @@ __git_commandlist="$(__git_commands 2>/dev/null)"
|
||||
__git_aliases ()
|
||||
{
|
||||
local i IFS=$'\n'
|
||||
for i in $(git --git-dir="$(__gitdir)" repo-config --list); do
|
||||
for i in $(git --git-dir="$(__gitdir)" config --list); do
|
||||
case "$i" in
|
||||
alias.*)
|
||||
i="${i#alias.}"
|
||||
@@ -299,7 +299,7 @@ __git_aliases ()
|
||||
__git_aliased_command ()
|
||||
{
|
||||
local word cmdline=$(git --git-dir="$(__gitdir)" \
|
||||
repo-config --get "alias.$1")
|
||||
config --get "alias.$1")
|
||||
for word in $cmdline; do
|
||||
if [ "${word##-*}" ]; then
|
||||
echo $word
|
||||
@@ -629,7 +629,7 @@ _git_rebase ()
|
||||
COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
|
||||
}
|
||||
|
||||
_git_repo_config ()
|
||||
_git_config ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
local prv="${COMP_WORDS[COMP_CWORD-1]}"
|
||||
@@ -806,6 +806,7 @@ _git ()
|
||||
checkout) _git_checkout ;;
|
||||
cherry-pick) _git_cherry_pick ;;
|
||||
commit) _git_commit ;;
|
||||
config) _git_config ;;
|
||||
diff) _git_diff ;;
|
||||
diff-tree) _git_diff_tree ;;
|
||||
fetch) _git_fetch ;;
|
||||
@@ -819,7 +820,7 @@ _git ()
|
||||
pull) _git_pull ;;
|
||||
push) _git_push ;;
|
||||
rebase) _git_rebase ;;
|
||||
repo-config) _git_repo_config ;;
|
||||
repo-config) _git_config ;;
|
||||
reset) _git_reset ;;
|
||||
show) _git_show ;;
|
||||
show-branch) _git_log ;;
|
||||
@@ -856,7 +857,7 @@ complete -o default -F _git_name_rev git-name-rev
|
||||
complete -o default -o nospace -F _git_pull git-pull
|
||||
complete -o default -o nospace -F _git_push git-push
|
||||
complete -o default -F _git_rebase git-rebase
|
||||
complete -o default -F _git_repo_config git-repo-config
|
||||
complete -o default -F _git_config git-config
|
||||
complete -o default -F _git_reset git-reset
|
||||
complete -o default -o nospace -F _git_show git-show
|
||||
complete -o default -o nospace -F _git_log git-show-branch
|
||||
@@ -879,7 +880,7 @@ complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
|
||||
complete -o default -F _git_merge_base git-merge-base.exe
|
||||
complete -o default -F _git_name_rev git-name-rev.exe
|
||||
complete -o default -o nospace -F _git_push git-push.exe
|
||||
complete -o default -F _git_repo_config git-repo-config
|
||||
complete -o default -F _git_config git-config
|
||||
complete -o default -o nospace -F _git_show git-show.exe
|
||||
complete -o default -o nospace -F _git_log git-show-branch.exe
|
||||
complete -o default -o nospace -F _git_log git-whatchanged.exe
|
||||
|
||||
@@ -222,7 +222,7 @@ and returns the process output as a string."
|
||||
"Return the name to use as GIT_COMMITTER_NAME."
|
||||
; copied from log-edit
|
||||
(or git-committer-name
|
||||
(git-repo-config "user.name")
|
||||
(git-config "user.name")
|
||||
(and (boundp 'add-log-full-name) add-log-full-name)
|
||||
(and (fboundp 'user-full-name) (user-full-name))
|
||||
(and (boundp 'user-full-name) user-full-name)))
|
||||
@@ -231,7 +231,7 @@ and returns the process output as a string."
|
||||
"Return the email address to use as GIT_COMMITTER_EMAIL."
|
||||
; copied from log-edit
|
||||
(or git-committer-email
|
||||
(git-repo-config "user.email")
|
||||
(git-config "user.email")
|
||||
(and (boundp 'add-log-mailing-address) add-log-mailing-address)
|
||||
(and (fboundp 'user-mail-address) (user-mail-address))
|
||||
(and (boundp 'user-mail-address) user-mail-address)))
|
||||
@@ -298,9 +298,9 @@ and returns the process output as a string."
|
||||
(git-get-string-sha1
|
||||
(git-call-process-env-string nil "rev-parse" rev)))
|
||||
|
||||
(defun git-repo-config (key)
|
||||
(defun git-config (key)
|
||||
"Retrieve the value associated to KEY in the git repository config file."
|
||||
(let ((str (git-call-process-env-string nil "repo-config" key)))
|
||||
(let ((str (git-call-process-env-string nil "config" key)))
|
||||
(and str (car (split-string str "\n")))))
|
||||
|
||||
(defun git-symbolic-ref (ref)
|
||||
|
||||
@@ -497,7 +497,7 @@ class GitView:
|
||||
fp.close()
|
||||
|
||||
def get_encoding(self):
|
||||
fp = os.popen("git repo-config --get i18n.commitencoding")
|
||||
fp = os.popen("git config --get i18n.commitencoding")
|
||||
self.encoding=string.strip(fp.readline())
|
||||
fp.close()
|
||||
if (self.encoding == ""):
|
||||
|
||||
@@ -26,8 +26,8 @@ if [ -d "$GIT_DIR"/remotes ]; then
|
||||
mv "$GIT_DIR"/remotes "$GIT_DIR"/remotes.old
|
||||
fi ;;
|
||||
*)
|
||||
echo "git-repo-config $key "$value" $regex"
|
||||
git-repo-config $key "$value" $regex || error=1 ;;
|
||||
echo "git-config $key "$value" $regex"
|
||||
git-config $key "$value" $regex || error=1 ;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
7
daemon.c
7
daemon.c
@@ -372,9 +372,16 @@ static int upload_archive(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int receive_pack(void)
|
||||
{
|
||||
execl_git_cmd("receive-pack", ".", NULL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static struct daemon_service daemon_service[] = {
|
||||
{ "upload-archive", "uploadarch", upload_archive, 0, 1 },
|
||||
{ "upload-pack", "uploadpack", upload_pack, 1, 1 },
|
||||
{ "receive-pack", "receivepack", receive_pack, 0, 1 },
|
||||
};
|
||||
|
||||
static void enable_service(const char *name, int ena) {
|
||||
|
||||
@@ -606,7 +606,7 @@ int main(int argc, char **argv)
|
||||
continue;
|
||||
}
|
||||
if (*arg == '-')
|
||||
usage("git-fsck-objects [--tags] [--root] [[--unreachable] [--cache] [--full] [--strict] <head-sha1>*]");
|
||||
usage("git-fsck [--tags] [--root] [[--unreachable] [--cache] [--full] [--strict] <head-sha1>*]");
|
||||
}
|
||||
|
||||
fsck_head_link();
|
||||
10
git-clone.sh
10
git-clone.sh
@@ -36,7 +36,7 @@ clone_dumb_http () {
|
||||
clone_tmp="$GIT_DIR/clone-tmp" &&
|
||||
mkdir -p "$clone_tmp" || exit 1
|
||||
if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \
|
||||
"`git-repo-config --bool http.noEPSV`" = true ]; then
|
||||
"`git-config --bool http.noEPSV`" = true ]; then
|
||||
curl_extra_args="${curl_extra_args} --disable-epsv"
|
||||
fi
|
||||
http_fetch "$1/info/refs" "$clone_tmp/refs" ||
|
||||
@@ -386,17 +386,17 @@ then
|
||||
git-update-ref HEAD "$head_sha1" &&
|
||||
|
||||
# Upstream URL
|
||||
git-repo-config remote."$origin".url "$repo" &&
|
||||
git-config remote."$origin".url "$repo" &&
|
||||
|
||||
# Set up the mappings to track the remote branches.
|
||||
git-repo-config remote."$origin".fetch \
|
||||
git-config remote."$origin".fetch \
|
||||
"+refs/heads/*:$remote_top/*" '^$' &&
|
||||
rm -f "refs/remotes/$origin/HEAD"
|
||||
git-symbolic-ref "refs/remotes/$origin/HEAD" \
|
||||
"refs/remotes/$origin/$head_points_at" &&
|
||||
|
||||
git-repo-config branch."$head_points_at".remote "$origin" &&
|
||||
git-repo-config branch."$head_points_at".merge "refs/heads/$head_points_at"
|
||||
git-config branch."$head_points_at".remote "$origin" &&
|
||||
git-config branch."$head_points_at".merge "refs/heads/$head_points_at"
|
||||
esac
|
||||
|
||||
case "$no_checkout" in
|
||||
|
||||
@@ -429,7 +429,7 @@ then
|
||||
fi
|
||||
elif test "$use_commit" != ""
|
||||
then
|
||||
encoding=$(git repo-config i18n.commitencoding || echo UTF-8)
|
||||
encoding=$(git config i18n.commitencoding || echo UTF-8)
|
||||
git show -s --pretty=raw --encoding="$encoding" "$use_commit" |
|
||||
sed -e '1,/^$/d' -e 's/^ //'
|
||||
elif test -f "$GIT_DIR/MERGE_MSG"
|
||||
@@ -485,7 +485,7 @@ then
|
||||
q
|
||||
}
|
||||
'
|
||||
encoding=$(git repo-config i18n.commitencoding || echo UTF-8)
|
||||
encoding=$(git config i18n.commitencoding || echo UTF-8)
|
||||
set_author_env=`git show -s --pretty=raw --encoding="$encoding" "$use_commit" |
|
||||
LANG=C LC_ALL=C sed -ne "$pick_author_script"`
|
||||
eval "$set_author_env"
|
||||
|
||||
@@ -172,11 +172,11 @@ sub req_Root
|
||||
return 0;
|
||||
}
|
||||
|
||||
my @gitvars = `git-repo-config -l`;
|
||||
my @gitvars = `git-config -l`;
|
||||
if ($?) {
|
||||
print "E problems executing git-repo-config on the server -- this is not a git repository or the PATH is not set correctly.\n";
|
||||
print "E problems executing git-config on the server -- this is not a git repository or the PATH is not set correctly.\n";
|
||||
print "E \n";
|
||||
print "error 1 - problem executing git-repo-config\n";
|
||||
print "error 1 - problem executing git-config\n";
|
||||
return 0;
|
||||
}
|
||||
foreach my $line ( @gitvars )
|
||||
|
||||
@@ -321,7 +321,7 @@ fetch_main () {
|
||||
curl_extra_args="-k"
|
||||
fi
|
||||
if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \
|
||||
"`git-repo-config --bool http.noEPSV`" = true ]; then
|
||||
"`git-config --bool http.noEPSV`" = true ]; then
|
||||
noepsv_opt="--disable-epsv"
|
||||
fi
|
||||
|
||||
|
||||
@@ -15,11 +15,11 @@ case "$GIT_DIR" in
|
||||
fqgitdir="$PWD/$GIT_DIR" ;;
|
||||
esac
|
||||
|
||||
local="`git repo-config --bool --get instaweb.local`"
|
||||
httpd="`git repo-config --get instaweb.httpd`"
|
||||
browser="`git repo-config --get instaweb.browser`"
|
||||
port=`git repo-config --get instaweb.port`
|
||||
module_path="`git repo-config --get instaweb.modulepath`"
|
||||
local="`git config --bool --get instaweb.local`"
|
||||
httpd="`git config --get instaweb.httpd`"
|
||||
browser="`git config --get instaweb.browser`"
|
||||
port=`git config --get instaweb.port`
|
||||
module_path="`git config --get instaweb.modulepath`"
|
||||
|
||||
conf=$GIT_DIR/gitweb/httpd.conf
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ fi
|
||||
laf="$GIT_DIR/lost-found"
|
||||
rm -fr "$laf" && mkdir -p "$laf/commit" "$laf/other" || exit
|
||||
|
||||
git fsck-objects --full |
|
||||
git fsck --full |
|
||||
while read dangling type sha1
|
||||
do
|
||||
case "$dangling" in
|
||||
|
||||
@@ -58,7 +58,7 @@ http://* | https://* | ftp://* )
|
||||
curl_extra_args="-k"
|
||||
fi
|
||||
if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \
|
||||
"`git-repo-config --bool http.noEPSV`" = true ]; then
|
||||
"`git-config --bool http.noEPSV`" = true ]; then
|
||||
curl_extra_args="${curl_extra_args} --disable-epsv"
|
||||
fi
|
||||
curl -nsf $curl_extra_args --header "Pragma: no-cache" "$peek_repo/info/refs" ||
|
||||
|
||||
@@ -278,7 +278,7 @@ case "$use_strategies" in
|
||||
'')
|
||||
case "$#" in
|
||||
1)
|
||||
var="`git-repo-config --get pull.twohead`"
|
||||
var="`git-config --get pull.twohead`"
|
||||
if test -n "$var"
|
||||
then
|
||||
use_strategies="$var"
|
||||
@@ -286,7 +286,7 @@ case "$use_strategies" in
|
||||
use_strategies="$default_twohead_strategies"
|
||||
fi ;;
|
||||
*)
|
||||
var="`git-repo-config --get pull.octopus`"
|
||||
var="`git-config --get pull.octopus`"
|
||||
if test -n "$var"
|
||||
then
|
||||
use_strategies="$var"
|
||||
|
||||
@@ -193,13 +193,13 @@ class git_command:
|
||||
|
||||
def get_config(self, variable):
|
||||
try:
|
||||
return self.git("repo-config --get %s" % variable)[0].rstrip()
|
||||
return self.git("config --get %s" % variable)[0].rstrip()
|
||||
except:
|
||||
return None
|
||||
|
||||
def set_config(self, variable, value):
|
||||
try:
|
||||
self.git("repo-config %s %s"%(variable, value) )
|
||||
self.git("config %s %s"%(variable, value) )
|
||||
except:
|
||||
die("Could not set %s to " % variable, value)
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ get_data_source () {
|
||||
echo ''
|
||||
;;
|
||||
*)
|
||||
if test "$(git-repo-config --get "remote.$1.url")"
|
||||
if test "$(git-config --get "remote.$1.url")"
|
||||
then
|
||||
echo config
|
||||
elif test -f "$GIT_DIR/remotes/$1"
|
||||
@@ -32,7 +32,7 @@ get_remote_url () {
|
||||
echo "$1"
|
||||
;;
|
||||
config)
|
||||
git-repo-config --get "remote.$1.url"
|
||||
git-config --get "remote.$1.url"
|
||||
;;
|
||||
remotes)
|
||||
sed -ne '/^URL: */{
|
||||
@@ -50,7 +50,7 @@ get_remote_url () {
|
||||
|
||||
get_default_remote () {
|
||||
curr_branch=$(git-symbolic-ref -q HEAD | sed -e 's|^refs/heads/||')
|
||||
origin=$(git-repo-config --get "branch.$curr_branch.remote")
|
||||
origin=$(git-config --get "branch.$curr_branch.remote")
|
||||
echo ${origin:-origin}
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ get_remote_default_refs_for_push () {
|
||||
'' | branches)
|
||||
;; # no default push mapping, just send matching refs.
|
||||
config)
|
||||
git-repo-config --get-all "remote.$1.push" ;;
|
||||
git-config --get-all "remote.$1.push" ;;
|
||||
remotes)
|
||||
sed -ne '/^Push: */{
|
||||
s///p
|
||||
@@ -146,7 +146,7 @@ canon_refs_list_for_fetch () {
|
||||
then
|
||||
curr_branch=$(git-symbolic-ref -q HEAD | \
|
||||
sed -e 's|^refs/heads/||')
|
||||
merge_branches=$(git-repo-config \
|
||||
merge_branches=$(git-config \
|
||||
--get-all "branch.${curr_branch}.merge")
|
||||
fi
|
||||
if test -z "$merge_branches" && test $is_explicit != explicit
|
||||
@@ -212,7 +212,7 @@ get_remote_default_refs_for_fetch () {
|
||||
echo "HEAD:" ;;
|
||||
config)
|
||||
canon_refs_list_for_fetch -d "$1" \
|
||||
$(git-repo-config --get-all "remote.$1.fetch") ;;
|
||||
$(git-config --get-all "remote.$1.fetch") ;;
|
||||
branches)
|
||||
remote_branch=$(sed -ne '/#/s/.*#//p' "$GIT_DIR/branches/$1")
|
||||
case "$remote_branch" in '') remote_branch=master ;; esac
|
||||
@@ -291,7 +291,7 @@ get_uploadpack () {
|
||||
data_source=$(get_data_source "$1")
|
||||
case "$data_source" in
|
||||
config)
|
||||
uplp=$(git-repo-config --get "remote.$1.uploadpack")
|
||||
uplp=$(git-config --get "remote.$1.uploadpack")
|
||||
echo ${uplp:-git-upload-pack}
|
||||
;;
|
||||
*)
|
||||
|
||||
@@ -64,7 +64,7 @@ sub list_remote {
|
||||
my ($git) = @_;
|
||||
my %seen = ();
|
||||
my @remotes = eval {
|
||||
$git->command(qw(repo-config --get-regexp), '^remote\.');
|
||||
$git->command(qw(config --get-regexp), '^remote\.');
|
||||
};
|
||||
for (@remotes) {
|
||||
if (/^remote\.([^.]*)\.(\S*)\s+(.*)$/) {
|
||||
@@ -103,7 +103,7 @@ sub list_branch {
|
||||
my ($git) = @_;
|
||||
my %seen = ();
|
||||
my @branches = eval {
|
||||
$git->command(qw(repo-config --get-regexp), '^branch\.');
|
||||
$git->command(qw(config --get-regexp), '^branch\.');
|
||||
};
|
||||
for (@branches) {
|
||||
if (/^branch\.([^.]*)\.(\S*)\s+(.*)$/) {
|
||||
@@ -238,8 +238,8 @@ sub add_remote {
|
||||
print STDERR "remote $name already exists.\n";
|
||||
exit(1);
|
||||
}
|
||||
$git->command('repo-config', "remote.$name.url", $url);
|
||||
$git->command('repo-config', "remote.$name.fetch",
|
||||
$git->command('config', "remote.$name.url", $url);
|
||||
$git->command('config', "remote.$name.fetch",
|
||||
"+refs/heads/*:refs/remotes/$name/*");
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ done
|
||||
# Later we will default repack.UseDeltaBaseOffset to true
|
||||
default_dbo=false
|
||||
|
||||
case "`git repo-config --bool repack.usedeltabaseoffset ||
|
||||
case "`git config --bool repack.usedeltabaseoffset ||
|
||||
echo $default_dbo`" in
|
||||
true)
|
||||
extra="$extra --delta-base-offset" ;;
|
||||
|
||||
@@ -81,7 +81,7 @@ prev=$(git-rev-parse --verify "$commit^1" 2>/dev/null) ||
|
||||
git-rev-parse --verify "$commit^2" >/dev/null 2>&1 &&
|
||||
die "Cannot run $me a multi-parent commit."
|
||||
|
||||
encoding=$(git repo-config i18n.commitencoding || echo UTF-8)
|
||||
encoding=$(git config i18n.commitencoding || echo UTF-8)
|
||||
|
||||
# "commit" is an existing commit. We would want to apply
|
||||
# the difference it introduces since its first parent "prev"
|
||||
|
||||
@@ -29,7 +29,7 @@ set_reflog_action() {
|
||||
}
|
||||
|
||||
is_bare_repository () {
|
||||
git-repo-config --bool --get core.bare ||
|
||||
git-config --bool --get core.bare ||
|
||||
case "$GIT_DIR" in
|
||||
.git | */.git) echo false ;;
|
||||
*) echo true ;;
|
||||
|
||||
20
git-svn.perl
20
git-svn.perl
@@ -593,7 +593,7 @@ sub multi_init {
|
||||
"$trunk_url ($_trunk)\n";
|
||||
}
|
||||
init($trunk_url);
|
||||
command_noisy('repo-config', 'svn.trunk', $trunk_url);
|
||||
command_noisy('config', 'svn.trunk', $trunk_url);
|
||||
}
|
||||
}
|
||||
$_prefix = '' unless defined $_prefix;
|
||||
@@ -772,22 +772,22 @@ sub log_use_color {
|
||||
return 1 if $_color;
|
||||
my ($dc, $dcvar);
|
||||
$dcvar = 'color.diff';
|
||||
$dc = `git-repo-config --get $dcvar`;
|
||||
$dc = `git-config --get $dcvar`;
|
||||
if ($dc eq '') {
|
||||
# nothing at all; fallback to "diff.color"
|
||||
$dcvar = 'diff.color';
|
||||
$dc = `git-repo-config --get $dcvar`;
|
||||
$dc = `git-config --get $dcvar`;
|
||||
}
|
||||
chomp($dc);
|
||||
if ($dc eq 'auto') {
|
||||
my $pc;
|
||||
$pc = `git-repo-config --get color.pager`;
|
||||
$pc = `git-config --get color.pager`;
|
||||
if ($pc eq '') {
|
||||
# does not have it -- fallback to pager.color
|
||||
$pc = `git-repo-config --bool --get pager.color`;
|
||||
$pc = `git-config --bool --get pager.color`;
|
||||
}
|
||||
else {
|
||||
$pc = `git-repo-config --bool --get color.pager`;
|
||||
$pc = `git-config --bool --get color.pager`;
|
||||
if ($?) {
|
||||
$pc = 'false';
|
||||
}
|
||||
@@ -800,7 +800,7 @@ sub log_use_color {
|
||||
}
|
||||
return 0 if $dc eq 'never';
|
||||
return 1 if $dc eq 'always';
|
||||
chomp($dc = `git-repo-config --bool --get $dcvar`);
|
||||
chomp($dc = `git-config --bool --get $dcvar`);
|
||||
return ($dc eq 'true');
|
||||
}
|
||||
|
||||
@@ -919,7 +919,7 @@ sub complete_url_ls_init {
|
||||
waitpid $pid, 0;
|
||||
croak $? if $?;
|
||||
my ($n) = ($switch =~ /^--(\w+)/);
|
||||
command_noisy('repo-config', "svn.$n", $full_url);
|
||||
command_noisy('config', "svn.$n", $full_url);
|
||||
}
|
||||
|
||||
sub common_prefix {
|
||||
@@ -1594,7 +1594,7 @@ sub init_vars {
|
||||
%tree_map = ();
|
||||
}
|
||||
|
||||
# convert GetOpt::Long specs for use by git-repo-config
|
||||
# convert GetOpt::Long specs for use by git-config
|
||||
sub read_repo_config {
|
||||
return unless -d $GIT_DIR;
|
||||
my $opts = shift;
|
||||
@@ -1602,7 +1602,7 @@ sub read_repo_config {
|
||||
my $v = $opts->{$o};
|
||||
my ($key) = ($o =~ /^([a-z\-]+)/);
|
||||
$key =~ s/-//g;
|
||||
my $arg = 'git-repo-config';
|
||||
my $arg = 'git-config';
|
||||
$arg .= ' --int' if ($o =~ /[:=]i$/);
|
||||
$arg .= ' --bool' if ($o !~ /[:=][sfi]$/);
|
||||
if (ref $v eq 'ARRAY') {
|
||||
|
||||
5
git.c
5
git.c
@@ -217,13 +217,14 @@ static void handle_internal_command(int argc, const char **argv, char **envp)
|
||||
{ "annotate", cmd_annotate, USE_PAGER },
|
||||
{ "apply", cmd_apply },
|
||||
{ "archive", cmd_archive },
|
||||
{ "blame", cmd_blame, RUN_SETUP | USE_PAGER },
|
||||
{ "blame", cmd_blame, RUN_SETUP },
|
||||
{ "branch", cmd_branch, RUN_SETUP },
|
||||
{ "cat-file", cmd_cat_file, RUN_SETUP },
|
||||
{ "checkout-index", cmd_checkout_index, RUN_SETUP },
|
||||
{ "check-ref-format", cmd_check_ref_format },
|
||||
{ "cherry", cmd_cherry, RUN_SETUP },
|
||||
{ "commit-tree", cmd_commit_tree, RUN_SETUP },
|
||||
{ "config", cmd_config },
|
||||
{ "count-objects", cmd_count_objects, RUN_SETUP },
|
||||
{ "describe", cmd_describe, RUN_SETUP },
|
||||
{ "diff", cmd_diff, RUN_SETUP | USE_PAGER },
|
||||
@@ -255,7 +256,7 @@ static void handle_internal_command(int argc, const char **argv, char **envp)
|
||||
{ "push", cmd_push, RUN_SETUP },
|
||||
{ "read-tree", cmd_read_tree, RUN_SETUP },
|
||||
{ "reflog", cmd_reflog, RUN_SETUP },
|
||||
{ "repo-config", cmd_repo_config },
|
||||
{ "repo-config", cmd_config },
|
||||
{ "rerere", cmd_rerere, RUN_SETUP },
|
||||
{ "rev-list", cmd_rev_list, RUN_SETUP },
|
||||
{ "rev-parse", cmd_rev_parse, RUN_SETUP },
|
||||
|
||||
2
gitk
2
gitk
@@ -6193,7 +6193,7 @@ set wrcomcmd "git diff-tree --stdin -p --pretty"
|
||||
|
||||
set gitencoding {}
|
||||
catch {
|
||||
set gitencoding [exec git repo-config --get i18n.commitencoding]
|
||||
set gitencoding [exec git config --get i18n.commitencoding]
|
||||
}
|
||||
if {$gitencoding == ""} {
|
||||
set gitencoding "utf-8"
|
||||
|
||||
@@ -986,7 +986,7 @@ sub git_get_project_config {
|
||||
$key =~ s/^gitweb\.//;
|
||||
return if ($key =~ m/\W/);
|
||||
|
||||
my @x = (git_cmd(), 'repo-config');
|
||||
my @x = (git_cmd(), 'config');
|
||||
if (defined $type) { push @x, $type; }
|
||||
push @x, "--get";
|
||||
push @x, "gitweb.$key";
|
||||
|
||||
@@ -1069,7 +1069,7 @@ int main(int argc, const char **argv)
|
||||
fprintf(stderr,
|
||||
"Some loose object were found to be corrupt, but they might be just\n"
|
||||
"a false '404 Not Found' error message sent with incorrect HTTP\n"
|
||||
"status code. Suggest running git fsck-objects.\n");
|
||||
"status code. Suggest running git-fsck.\n");
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
4
ident.c
4
ident.c
@@ -178,8 +178,8 @@ static const char *env_hint =
|
||||
"\n"
|
||||
"Run\n"
|
||||
"\n"
|
||||
" git repo-config user.email \"you@email.com\"\n"
|
||||
" git repo-config user.name \"Your Name\"\n"
|
||||
" git config user.email \"you@email.com\"\n"
|
||||
" git config user.name \"Your Name\"\n"
|
||||
"\n"
|
||||
"To set the identity in this repository.\n"
|
||||
"Add --global to set your account\'s default\n"
|
||||
|
||||
@@ -482,14 +482,14 @@ sub wc_chdir {
|
||||
|
||||
=item config ( VARIABLE )
|
||||
|
||||
Retrieve the configuration C<VARIABLE> in the same manner as C<repo-config>
|
||||
Retrieve the configuration C<VARIABLE> in the same manner as C<config>
|
||||
does. In scalar context requires the variable to be set only one time
|
||||
(exception is thrown otherwise), in array context returns allows the
|
||||
variable to be set multiple times and returns all the values.
|
||||
|
||||
Must be called on a repository instance.
|
||||
|
||||
This currently wraps command('repo-config') so it is not so fast.
|
||||
This currently wraps command('config') so it is not so fast.
|
||||
|
||||
=cut
|
||||
|
||||
@@ -500,9 +500,9 @@ sub config {
|
||||
|
||||
try {
|
||||
if (wantarray) {
|
||||
return $self->command('repo-config', '--get-all', $var);
|
||||
return $self->command('config', '--get-all', $var);
|
||||
} else {
|
||||
return $self->command_oneline('repo-config', '--get', $var);
|
||||
return $self->command_oneline('config', '--get', $var);
|
||||
}
|
||||
} catch Git::Error::Command with {
|
||||
my $E = shift;
|
||||
|
||||
34
quote.c
34
quote.c
@@ -387,3 +387,37 @@ void python_quote_print(FILE *stream, const char *src)
|
||||
}
|
||||
fputc(sq, stream);
|
||||
}
|
||||
|
||||
void tcl_quote_print(FILE *stream, const char *src)
|
||||
{
|
||||
char c;
|
||||
|
||||
fputc('"', stream);
|
||||
while ((c = *src++)) {
|
||||
switch (c) {
|
||||
case '[': case ']':
|
||||
case '{': case '}':
|
||||
case '$': case '\\': case '"':
|
||||
fputc('\\', stream);
|
||||
default:
|
||||
fputc(c, stream);
|
||||
break;
|
||||
case '\f':
|
||||
fputs("\\f", stream);
|
||||
break;
|
||||
case '\r':
|
||||
fputs("\\r", stream);
|
||||
break;
|
||||
case '\n':
|
||||
fputs("\\n", stream);
|
||||
break;
|
||||
case '\t':
|
||||
fputs("\\t", stream);
|
||||
break;
|
||||
case '\v':
|
||||
fputs("\\v", stream);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fputc('"', stream);
|
||||
}
|
||||
|
||||
1
quote.h
1
quote.h
@@ -55,5 +55,6 @@ extern void write_name_quoted(const char *prefix, int prefix_len,
|
||||
/* quoting as a string literal for other languages */
|
||||
extern void perl_quote_print(FILE *stream, const char *src);
|
||||
extern void python_quote_print(FILE *stream, const char *src);
|
||||
extern void tcl_quote_print(FILE *stream, const char *src);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
# Copyright (c) 2005 Johannes Schindelin
|
||||
#
|
||||
|
||||
test_description='Test git-repo-config in different settings'
|
||||
test_description='Test git-config in different settings'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
test -f .git/config && rm .git/config
|
||||
|
||||
git-repo-config core.penguin "little blue"
|
||||
git-config core.penguin "little blue"
|
||||
|
||||
cat > expect << EOF
|
||||
[core]
|
||||
@@ -18,7 +18,7 @@ EOF
|
||||
|
||||
test_expect_success 'initial' 'cmp .git/config expect'
|
||||
|
||||
git-repo-config Core.Movie BadPhysics
|
||||
git-config Core.Movie BadPhysics
|
||||
|
||||
cat > expect << EOF
|
||||
[core]
|
||||
@@ -28,7 +28,7 @@ EOF
|
||||
|
||||
test_expect_success 'mixed case' 'cmp .git/config expect'
|
||||
|
||||
git-repo-config Cores.WhatEver Second
|
||||
git-config Cores.WhatEver Second
|
||||
|
||||
cat > expect << EOF
|
||||
[core]
|
||||
@@ -40,7 +40,7 @@ EOF
|
||||
|
||||
test_expect_success 'similar section' 'cmp .git/config expect'
|
||||
|
||||
git-repo-config CORE.UPPERCASE true
|
||||
git-config CORE.UPPERCASE true
|
||||
|
||||
cat > expect << EOF
|
||||
[core]
|
||||
@@ -54,10 +54,10 @@ EOF
|
||||
test_expect_success 'similar section' 'cmp .git/config expect'
|
||||
|
||||
test_expect_success 'replace with non-match' \
|
||||
'git-repo-config core.penguin kingpin !blue'
|
||||
'git-config core.penguin kingpin !blue'
|
||||
|
||||
test_expect_success 'replace with non-match (actually matching)' \
|
||||
'git-repo-config core.penguin "very blue" !kingpin'
|
||||
'git-config core.penguin "very blue" !kingpin'
|
||||
|
||||
cat > expect << EOF
|
||||
[core]
|
||||
@@ -86,7 +86,7 @@ EOF
|
||||
cp .git/config .git/config2
|
||||
|
||||
test_expect_success 'multiple unset' \
|
||||
'git-repo-config --unset-all beta.haha'
|
||||
'git-config --unset-all beta.haha'
|
||||
|
||||
cat > expect << EOF
|
||||
[beta] ; silly comment # another comment
|
||||
@@ -102,7 +102,7 @@ test_expect_success 'multiple unset is correct' 'cmp .git/config expect'
|
||||
mv .git/config2 .git/config
|
||||
|
||||
test_expect_success '--replace-all' \
|
||||
'git-repo-config --replace-all beta.haha gamma'
|
||||
'git-config --replace-all beta.haha gamma'
|
||||
|
||||
cat > expect << EOF
|
||||
[beta] ; silly comment # another comment
|
||||
@@ -116,7 +116,7 @@ EOF
|
||||
|
||||
test_expect_success 'all replaced' 'cmp .git/config expect'
|
||||
|
||||
git-repo-config beta.haha alpha
|
||||
git-config beta.haha alpha
|
||||
|
||||
cat > expect << EOF
|
||||
[beta] ; silly comment # another comment
|
||||
@@ -130,7 +130,7 @@ EOF
|
||||
|
||||
test_expect_success 'really mean test' 'cmp .git/config expect'
|
||||
|
||||
git-repo-config nextsection.nonewline wow
|
||||
git-config nextsection.nonewline wow
|
||||
|
||||
cat > expect << EOF
|
||||
[beta] ; silly comment # another comment
|
||||
@@ -145,8 +145,8 @@ EOF
|
||||
|
||||
test_expect_success 'really really mean test' 'cmp .git/config expect'
|
||||
|
||||
test_expect_success 'get value' 'test alpha = $(git-repo-config beta.haha)'
|
||||
git-repo-config --unset beta.haha
|
||||
test_expect_success 'get value' 'test alpha = $(git-config beta.haha)'
|
||||
git-config --unset beta.haha
|
||||
|
||||
cat > expect << EOF
|
||||
[beta] ; silly comment # another comment
|
||||
@@ -160,7 +160,7 @@ EOF
|
||||
|
||||
test_expect_success 'unset' 'cmp .git/config expect'
|
||||
|
||||
git-repo-config nextsection.NoNewLine "wow2 for me" "for me$"
|
||||
git-config nextsection.NoNewLine "wow2 for me" "for me$"
|
||||
|
||||
cat > expect << EOF
|
||||
[beta] ; silly comment # another comment
|
||||
@@ -176,18 +176,18 @@ EOF
|
||||
test_expect_success 'multivar' 'cmp .git/config expect'
|
||||
|
||||
test_expect_success 'non-match' \
|
||||
'git-repo-config --get nextsection.nonewline !for'
|
||||
'git-config --get nextsection.nonewline !for'
|
||||
|
||||
test_expect_success 'non-match value' \
|
||||
'test wow = $(git-repo-config --get nextsection.nonewline !for)'
|
||||
'test wow = $(git-config --get nextsection.nonewline !for)'
|
||||
|
||||
test_expect_failure 'ambiguous get' \
|
||||
'git-repo-config --get nextsection.nonewline'
|
||||
'git-config --get nextsection.nonewline'
|
||||
|
||||
test_expect_success 'get multivar' \
|
||||
'git-repo-config --get-all nextsection.nonewline'
|
||||
'git-config --get-all nextsection.nonewline'
|
||||
|
||||
git-repo-config nextsection.nonewline "wow3" "wow$"
|
||||
git-config nextsection.nonewline "wow3" "wow$"
|
||||
|
||||
cat > expect << EOF
|
||||
[beta] ; silly comment # another comment
|
||||
@@ -202,15 +202,15 @@ EOF
|
||||
|
||||
test_expect_success 'multivar replace' 'cmp .git/config expect'
|
||||
|
||||
test_expect_failure 'ambiguous value' 'git-repo-config nextsection.nonewline'
|
||||
test_expect_failure 'ambiguous value' 'git-config nextsection.nonewline'
|
||||
|
||||
test_expect_failure 'ambiguous unset' \
|
||||
'git-repo-config --unset nextsection.nonewline'
|
||||
'git-config --unset nextsection.nonewline'
|
||||
|
||||
test_expect_failure 'invalid unset' \
|
||||
'git-repo-config --unset somesection.nonewline'
|
||||
'git-config --unset somesection.nonewline'
|
||||
|
||||
git-repo-config --unset nextsection.nonewline "wow3$"
|
||||
git-config --unset nextsection.nonewline "wow3$"
|
||||
|
||||
cat > expect << EOF
|
||||
[beta] ; silly comment # another comment
|
||||
@@ -224,12 +224,12 @@ EOF
|
||||
|
||||
test_expect_success 'multivar unset' 'cmp .git/config expect'
|
||||
|
||||
test_expect_failure 'invalid key' 'git-repo-config inval.2key blabla'
|
||||
test_expect_failure 'invalid key' 'git-config inval.2key blabla'
|
||||
|
||||
test_expect_success 'correct key' 'git-repo-config 123456.a123 987'
|
||||
test_expect_success 'correct key' 'git-config 123456.a123 987'
|
||||
|
||||
test_expect_success 'hierarchical section' \
|
||||
'git-repo-config Version.1.2.3eX.Alpha beta'
|
||||
'git-config Version.1.2.3eX.Alpha beta'
|
||||
|
||||
cat > expect << EOF
|
||||
[beta] ; silly comment # another comment
|
||||
@@ -255,7 +255,7 @@ version.1.2.3eX.alpha=beta
|
||||
EOF
|
||||
|
||||
test_expect_success 'working --list' \
|
||||
'git-repo-config --list > output && cmp output expect'
|
||||
'git-config --list > output && cmp output expect'
|
||||
|
||||
cat > expect << EOF
|
||||
beta.noindent sillyValue
|
||||
@@ -263,9 +263,9 @@ nextsection.nonewline wow2 for me
|
||||
EOF
|
||||
|
||||
test_expect_success '--get-regexp' \
|
||||
'git-repo-config --get-regexp in > output && cmp output expect'
|
||||
'git-config --get-regexp in > output && cmp output expect'
|
||||
|
||||
git-repo-config --add nextsection.nonewline "wow4 for you"
|
||||
git-config --add nextsection.nonewline "wow4 for you"
|
||||
|
||||
cat > expect << EOF
|
||||
wow2 for me
|
||||
@@ -273,7 +273,7 @@ wow4 for you
|
||||
EOF
|
||||
|
||||
test_expect_success '--add' \
|
||||
'git-repo-config --get-all nextsection.nonewline > output && cmp output expect'
|
||||
'git-config --get-all nextsection.nonewline > output && cmp output expect'
|
||||
|
||||
cat > .git/config << EOF
|
||||
[novalue]
|
||||
@@ -281,9 +281,9 @@ cat > .git/config << EOF
|
||||
EOF
|
||||
|
||||
test_expect_success 'get variable with no value' \
|
||||
'git-repo-config --get novalue.variable ^$'
|
||||
'git-config --get novalue.variable ^$'
|
||||
|
||||
git-repo-config > output 2>&1
|
||||
git-config > output 2>&1
|
||||
|
||||
test_expect_success 'no arguments, but no crash' \
|
||||
"test $? = 129 && grep usage output"
|
||||
@@ -293,7 +293,7 @@ cat > .git/config << EOF
|
||||
c = d
|
||||
EOF
|
||||
|
||||
git-repo-config a.x y
|
||||
git-config a.x y
|
||||
|
||||
cat > expect << EOF
|
||||
[a.b]
|
||||
@@ -304,8 +304,8 @@ EOF
|
||||
|
||||
test_expect_success 'new section is partial match of another' 'cmp .git/config expect'
|
||||
|
||||
git-repo-config b.x y
|
||||
git-repo-config a.b c
|
||||
git-config b.x y
|
||||
git-config a.b c
|
||||
|
||||
cat > expect << EOF
|
||||
[a.b]
|
||||
@@ -328,11 +328,11 @@ cat > expect << EOF
|
||||
ein.bahn=strasse
|
||||
EOF
|
||||
|
||||
GIT_CONFIG=other-config git-repo-config -l > output
|
||||
GIT_CONFIG=other-config git-config -l > output
|
||||
|
||||
test_expect_success 'alternative GIT_CONFIG' 'cmp output expect'
|
||||
|
||||
GIT_CONFIG=other-config git-repo-config anwohner.park ausweis
|
||||
GIT_CONFIG=other-config git-config anwohner.park ausweis
|
||||
|
||||
cat > expect << EOF
|
||||
[ein]
|
||||
@@ -355,7 +355,7 @@ weird
|
||||
EOF
|
||||
|
||||
test_expect_success "rename section" \
|
||||
"git-repo-config --rename-section branch.eins branch.zwei"
|
||||
"git-config --rename-section branch.eins branch.zwei"
|
||||
|
||||
cat > expect << EOF
|
||||
# Hallo
|
||||
@@ -371,12 +371,12 @@ EOF
|
||||
test_expect_success "rename succeeded" "diff -u expect .git/config"
|
||||
|
||||
test_expect_failure "rename non-existing section" \
|
||||
'git-repo-config --rename-section branch."world domination" branch.drei'
|
||||
'git-config --rename-section branch."world domination" branch.drei'
|
||||
|
||||
test_expect_success "rename succeeded" "diff -u expect .git/config"
|
||||
|
||||
test_expect_success "rename another section" \
|
||||
'git-repo-config --rename-section branch."1 234 blabl/a" branch.drei'
|
||||
'git-config --rename-section branch."1 234 blabl/a" branch.drei'
|
||||
|
||||
cat > expect << EOF
|
||||
# Hallo
|
||||
@@ -393,20 +393,20 @@ test_expect_success "rename succeeded" "diff -u expect .git/config"
|
||||
|
||||
test_expect_success numbers '
|
||||
|
||||
git-repo-config kilo.gram 1k &&
|
||||
git-repo-config mega.ton 1m &&
|
||||
k=$(git-repo-config --int --get kilo.gram) &&
|
||||
git-config kilo.gram 1k &&
|
||||
git-config mega.ton 1m &&
|
||||
k=$(git-config --int --get kilo.gram) &&
|
||||
test z1024 = "z$k" &&
|
||||
m=$(git-repo-config --int --get mega.ton) &&
|
||||
m=$(git-config --int --get mega.ton) &&
|
||||
test z1048576 = "z$m"
|
||||
'
|
||||
|
||||
rm .git/config
|
||||
|
||||
git-repo-config quote.leading " test"
|
||||
git-repo-config quote.ending "test "
|
||||
git-repo-config quote.semicolon "test;test"
|
||||
git-repo-config quote.hash "test#test"
|
||||
git-config quote.leading " test"
|
||||
git-config quote.ending "test "
|
||||
git-config quote.semicolon "test;test"
|
||||
git-config quote.hash "test#test"
|
||||
|
||||
cat > expect << EOF
|
||||
[quote]
|
||||
@@ -418,10 +418,10 @@ EOF
|
||||
|
||||
test_expect_success 'quoting' 'cmp .git/config expect'
|
||||
|
||||
test_expect_failure 'key with newline' 'git repo-config key.with\\\
|
||||
test_expect_failure 'key with newline' 'git config key.with\\\
|
||||
newline 123'
|
||||
|
||||
test_expect_success 'value with newline' 'git repo-config key.sub value.with\\\
|
||||
test_expect_success 'value with newline' 'git config key.sub value.with\\\
|
||||
newline'
|
||||
|
||||
cat > .git/config <<\EOF
|
||||
@@ -440,7 +440,7 @@ section.noncont=not continued
|
||||
section.quotecont=cont;inued
|
||||
EOF
|
||||
|
||||
git repo-config --list > result
|
||||
git config --list > result
|
||||
|
||||
test_expect_success 'value continued on next line' 'cmp result expect'
|
||||
|
||||
|
||||
@@ -93,8 +93,8 @@ rm -rf .git/$m .git/logs expect
|
||||
|
||||
test_expect_success \
|
||||
'enable core.logAllRefUpdates' \
|
||||
'git-repo-config core.logAllRefUpdates true &&
|
||||
test true = $(git-repo-config --bool --get core.logAllRefUpdates)'
|
||||
'git-config core.logAllRefUpdates true &&
|
||||
test true = $(git-config --bool --get core.logAllRefUpdates)'
|
||||
|
||||
test_expect_success \
|
||||
"create $m (logged by config)" \
|
||||
|
||||
@@ -20,7 +20,7 @@ check_have () {
|
||||
}
|
||||
|
||||
check_fsck () {
|
||||
output=$(git fsck-objects --full)
|
||||
output=$(git fsck --full)
|
||||
case "$1" in
|
||||
'')
|
||||
test -z "$output" ;;
|
||||
@@ -71,7 +71,7 @@ test_expect_success setup '
|
||||
check_fsck &&
|
||||
|
||||
chmod +x C &&
|
||||
( test "`git repo-config --bool core.filemode`" != false ||
|
||||
( test "`git config --bool core.filemode`" != false ||
|
||||
echo executable >>C ) &&
|
||||
git add C &&
|
||||
test_tick && git commit -m dragon &&
|
||||
|
||||
@@ -94,7 +94,7 @@ test_expect_failure \
|
||||
git-branch r &&
|
||||
git-branch -m q r/q'
|
||||
|
||||
git-repo-config branch.s/s.dummy Hello
|
||||
git-config branch.s/s.dummy Hello
|
||||
|
||||
test_expect_success \
|
||||
'git branch -m s/s s should work when s/t is deleted' \
|
||||
@@ -107,8 +107,8 @@ test_expect_success \
|
||||
test -f .git/logs/refs/heads/s'
|
||||
|
||||
test_expect_success 'config information was renamed, too' \
|
||||
"test $(git-repo-config branch.s.dummy) = Hello &&
|
||||
! git-repo-config branch.s/s/dummy"
|
||||
"test $(git-config branch.s.dummy) = Hello &&
|
||||
! git-config branch.s/s/dummy"
|
||||
|
||||
test_expect_failure \
|
||||
'git-branch -m u v should fail when the reflog for u is a symlink' \
|
||||
|
||||
@@ -21,7 +21,7 @@ test_expect_success \
|
||||
|
||||
test_expect_success \
|
||||
'git-add: Test that executable bit is not used if core.filemode=0' \
|
||||
'git repo-config core.filemode 0 &&
|
||||
'git config core.filemode 0 &&
|
||||
echo foo >xfoo1 &&
|
||||
chmod 755 xfoo1 &&
|
||||
git-add xfoo1 &&
|
||||
@@ -32,7 +32,7 @@ test_expect_success \
|
||||
|
||||
test_expect_success \
|
||||
'git-update-index --add: Test that executable bit is not used...' \
|
||||
'git repo-config core.filemode 0 &&
|
||||
'git config core.filemode 0 &&
|
||||
echo foo >xfoo2 &&
|
||||
chmod 755 xfoo2 &&
|
||||
git-update-index --add xfoo2 &&
|
||||
@@ -43,7 +43,7 @@ test_expect_success \
|
||||
|
||||
test_expect_success \
|
||||
'git-update-index --add: Test that executable bit is not used...' \
|
||||
'git repo-config core.filemode 0 &&
|
||||
'git config core.filemode 0 &&
|
||||
ln -s xfoo2 xfoo3 &&
|
||||
git-update-index --add xfoo3 &&
|
||||
case "`git-ls-files --stage xfoo3`" in
|
||||
|
||||
@@ -29,7 +29,7 @@ test_expect_success 'no encoding header for base case' '
|
||||
for H in ISO-8859-1 EUCJP ISO-2022-JP
|
||||
do
|
||||
test_expect_success "$H setup" '
|
||||
git-repo-config i18n.commitencoding $H &&
|
||||
git-config i18n.commitencoding $H &&
|
||||
git-checkout -b $H C0 &&
|
||||
echo $H >F &&
|
||||
git-commit -a -F ../t3900/$H.txt
|
||||
@@ -44,16 +44,16 @@ do
|
||||
'
|
||||
done
|
||||
|
||||
test_expect_success 'repo-config to remove customization' '
|
||||
git-repo-config --unset-all i18n.commitencoding &&
|
||||
if Z=$(git-repo-config --get-all i18n.commitencoding)
|
||||
test_expect_success 'config to remove customization' '
|
||||
git-config --unset-all i18n.commitencoding &&
|
||||
if Z=$(git-config --get-all i18n.commitencoding)
|
||||
then
|
||||
echo Oops, should have failed.
|
||||
false
|
||||
else
|
||||
test z = "z$Z"
|
||||
fi &&
|
||||
git-repo-config i18n.commitencoding utf-8
|
||||
git-config i18n.commitencoding utf-8
|
||||
'
|
||||
|
||||
test_expect_success 'ISO-8859-1 should be shown in UTF-8 now' '
|
||||
@@ -67,9 +67,9 @@ do
|
||||
'
|
||||
done
|
||||
|
||||
test_expect_success 'repo-config to add customization' '
|
||||
git-repo-config --unset-all i18n.commitencoding &&
|
||||
if Z=$(git-repo-config --get-all i18n.commitencoding)
|
||||
test_expect_success 'config to add customization' '
|
||||
git-config --unset-all i18n.commitencoding &&
|
||||
if Z=$(git-config --get-all i18n.commitencoding)
|
||||
then
|
||||
echo Oops, should have failed.
|
||||
false
|
||||
@@ -81,13 +81,13 @@ test_expect_success 'repo-config to add customization' '
|
||||
for H in ISO-8859-1 EUCJP ISO-2022-JP
|
||||
do
|
||||
test_expect_success "$H should be shown in itself now" '
|
||||
git-repo-config i18n.commitencoding '$H' &&
|
||||
git-config i18n.commitencoding '$H' &&
|
||||
compare_with '$H' ../t3900/'$H'.txt
|
||||
'
|
||||
done
|
||||
|
||||
test_expect_success 'repo-config to tweak customization' '
|
||||
git-repo-config i18n.logoutputencoding utf-8
|
||||
test_expect_success 'config to tweak customization' '
|
||||
git-config i18n.logoutputencoding utf-8
|
||||
'
|
||||
|
||||
test_expect_success 'ISO-8859-1 should be shown in UTF-8 now' '
|
||||
@@ -103,7 +103,7 @@ done
|
||||
|
||||
for J in EUCJP ISO-2022-JP
|
||||
do
|
||||
git-repo-config i18n.logoutputencoding $J
|
||||
git-config i18n.logoutputencoding $J
|
||||
for H in EUCJP ISO-2022-JP
|
||||
do
|
||||
test_expect_success "$H should be shown in $J now" '
|
||||
|
||||
@@ -31,7 +31,7 @@ check_encoding () {
|
||||
}
|
||||
|
||||
test_expect_success setup '
|
||||
git-repo-config i18n.commitencoding UTF-8 &&
|
||||
git-config i18n.commitencoding UTF-8 &&
|
||||
|
||||
# use UTF-8 in author and committer name to match the
|
||||
# i18n.commitencoding settings
|
||||
@@ -55,7 +55,7 @@ test_expect_success setup '
|
||||
git commit -s -m "Second on side" &&
|
||||
|
||||
# the second one on the side branch is ISO-8859-1
|
||||
git-repo-config i18n.commitencoding ISO-8859-1 &&
|
||||
git-config i18n.commitencoding ISO-8859-1 &&
|
||||
# use author and committer name in ISO-8859-1 to match it.
|
||||
. ../t3901-8859-1.txt &&
|
||||
test_tick &&
|
||||
@@ -64,11 +64,11 @@ test_expect_success setup '
|
||||
git commit -s -m "Third on side" &&
|
||||
|
||||
# Back to default
|
||||
git-repo-config i18n.commitencoding UTF-8
|
||||
git-config i18n.commitencoding UTF-8
|
||||
'
|
||||
|
||||
test_expect_success 'format-patch output (ISO-8859-1)' '
|
||||
git-repo-config i18n.logoutputencoding ISO-8859-1 &&
|
||||
git-config i18n.logoutputencoding ISO-8859-1 &&
|
||||
|
||||
git format-patch --stdout master..HEAD^ >out-l1 &&
|
||||
git format-patch --stdout HEAD^ >out-l2 &&
|
||||
@@ -79,7 +79,7 @@ test_expect_success 'format-patch output (ISO-8859-1)' '
|
||||
'
|
||||
|
||||
test_expect_success 'format-patch output (UTF-8)' '
|
||||
git repo-config i18n.logoutputencoding UTF-8 &&
|
||||
git config i18n.logoutputencoding UTF-8 &&
|
||||
|
||||
git format-patch --stdout master..HEAD^ >out-u1 &&
|
||||
git format-patch --stdout HEAD^ >out-u2 &&
|
||||
@@ -91,13 +91,13 @@ test_expect_success 'format-patch output (UTF-8)' '
|
||||
|
||||
test_expect_success 'rebase (U/U)' '
|
||||
# We want the result of rebase in UTF-8
|
||||
git-repo-config i18n.commitencoding UTF-8 &&
|
||||
git-config i18n.commitencoding UTF-8 &&
|
||||
|
||||
# The test is about logoutputencoding not affecting the
|
||||
# final outcome -- it is used internally to generate the
|
||||
# patch and the log.
|
||||
|
||||
git repo-config i18n.logoutputencoding UTF-8 &&
|
||||
git config i18n.logoutputencoding UTF-8 &&
|
||||
|
||||
# The result will be committed by GIT_COMMITTER_NAME --
|
||||
# we want UTF-8 encoded name.
|
||||
@@ -109,8 +109,8 @@ test_expect_success 'rebase (U/U)' '
|
||||
'
|
||||
|
||||
test_expect_success 'rebase (U/L)' '
|
||||
git-repo-config i18n.commitencoding UTF-8 &&
|
||||
git repo-config i18n.logoutputencoding ISO-8859-1 &&
|
||||
git-config i18n.commitencoding UTF-8 &&
|
||||
git config i18n.logoutputencoding ISO-8859-1 &&
|
||||
. ../t3901-utf8.txt &&
|
||||
|
||||
git reset --hard side &&
|
||||
@@ -121,8 +121,8 @@ test_expect_success 'rebase (U/L)' '
|
||||
|
||||
test_expect_success 'rebase (L/L)' '
|
||||
# In this test we want ISO-8859-1 encoded commits as the result
|
||||
git-repo-config i18n.commitencoding ISO-8859-1 &&
|
||||
git repo-config i18n.logoutputencoding ISO-8859-1 &&
|
||||
git-config i18n.commitencoding ISO-8859-1 &&
|
||||
git config i18n.logoutputencoding ISO-8859-1 &&
|
||||
. ../t3901-8859-1.txt &&
|
||||
|
||||
git reset --hard side &&
|
||||
@@ -134,8 +134,8 @@ test_expect_success 'rebase (L/L)' '
|
||||
test_expect_success 'rebase (L/U)' '
|
||||
# This is pathological -- use UTF-8 as intermediate form
|
||||
# to get ISO-8859-1 results.
|
||||
git-repo-config i18n.commitencoding ISO-8859-1 &&
|
||||
git repo-config i18n.logoutputencoding UTF-8 &&
|
||||
git-config i18n.commitencoding ISO-8859-1 &&
|
||||
git config i18n.logoutputencoding UTF-8 &&
|
||||
. ../t3901-8859-1.txt &&
|
||||
|
||||
git reset --hard side &&
|
||||
@@ -147,8 +147,8 @@ test_expect_success 'rebase (L/U)' '
|
||||
test_expect_success 'cherry-pick(U/U)' '
|
||||
# Both the commitencoding and logoutputencoding is set to UTF-8.
|
||||
|
||||
git-repo-config i18n.commitencoding UTF-8 &&
|
||||
git repo-config i18n.logoutputencoding UTF-8 &&
|
||||
git-config i18n.commitencoding UTF-8 &&
|
||||
git config i18n.logoutputencoding UTF-8 &&
|
||||
. ../t3901-utf8.txt &&
|
||||
|
||||
git reset --hard master &&
|
||||
@@ -162,8 +162,8 @@ test_expect_success 'cherry-pick(U/U)' '
|
||||
test_expect_success 'cherry-pick(L/L)' '
|
||||
# Both the commitencoding and logoutputencoding is set to ISO-8859-1
|
||||
|
||||
git-repo-config i18n.commitencoding ISO-8859-1 &&
|
||||
git repo-config i18n.logoutputencoding ISO-8859-1 &&
|
||||
git-config i18n.commitencoding ISO-8859-1 &&
|
||||
git config i18n.logoutputencoding ISO-8859-1 &&
|
||||
. ../t3901-8859-1.txt &&
|
||||
|
||||
git reset --hard master &&
|
||||
@@ -177,8 +177,8 @@ test_expect_success 'cherry-pick(L/L)' '
|
||||
test_expect_success 'cherry-pick(U/L)' '
|
||||
# Commitencoding is set to UTF-8 but logoutputencoding is ISO-8859-1
|
||||
|
||||
git-repo-config i18n.commitencoding UTF-8 &&
|
||||
git repo-config i18n.logoutputencoding ISO-8859-1 &&
|
||||
git-config i18n.commitencoding UTF-8 &&
|
||||
git config i18n.logoutputencoding ISO-8859-1 &&
|
||||
. ../t3901-utf8.txt &&
|
||||
|
||||
git reset --hard master &&
|
||||
@@ -193,8 +193,8 @@ test_expect_success 'cherry-pick(L/U)' '
|
||||
# Again, the commitencoding is set to ISO-8859-1 but
|
||||
# logoutputencoding is set to UTF-8.
|
||||
|
||||
git-repo-config i18n.commitencoding ISO-8859-1 &&
|
||||
git repo-config i18n.logoutputencoding UTF-8 &&
|
||||
git-config i18n.commitencoding ISO-8859-1 &&
|
||||
git config i18n.logoutputencoding UTF-8 &&
|
||||
. ../t3901-8859-1.txt &&
|
||||
|
||||
git reset --hard master &&
|
||||
@@ -206,8 +206,8 @@ test_expect_success 'cherry-pick(L/U)' '
|
||||
'
|
||||
|
||||
test_expect_success 'rebase --merge (U/U)' '
|
||||
git-repo-config i18n.commitencoding UTF-8 &&
|
||||
git repo-config i18n.logoutputencoding UTF-8 &&
|
||||
git-config i18n.commitencoding UTF-8 &&
|
||||
git config i18n.logoutputencoding UTF-8 &&
|
||||
. ../t3901-utf8.txt &&
|
||||
|
||||
git reset --hard side &&
|
||||
@@ -217,8 +217,8 @@ test_expect_success 'rebase --merge (U/U)' '
|
||||
'
|
||||
|
||||
test_expect_success 'rebase --merge (U/L)' '
|
||||
git-repo-config i18n.commitencoding UTF-8 &&
|
||||
git repo-config i18n.logoutputencoding ISO-8859-1 &&
|
||||
git-config i18n.commitencoding UTF-8 &&
|
||||
git config i18n.logoutputencoding ISO-8859-1 &&
|
||||
. ../t3901-utf8.txt &&
|
||||
|
||||
git reset --hard side &&
|
||||
@@ -229,8 +229,8 @@ test_expect_success 'rebase --merge (U/L)' '
|
||||
|
||||
test_expect_success 'rebase --merge (L/L)' '
|
||||
# In this test we want ISO-8859-1 encoded commits as the result
|
||||
git-repo-config i18n.commitencoding ISO-8859-1 &&
|
||||
git repo-config i18n.logoutputencoding ISO-8859-1 &&
|
||||
git-config i18n.commitencoding ISO-8859-1 &&
|
||||
git config i18n.logoutputencoding ISO-8859-1 &&
|
||||
. ../t3901-8859-1.txt &&
|
||||
|
||||
git reset --hard side &&
|
||||
@@ -242,8 +242,8 @@ test_expect_success 'rebase --merge (L/L)' '
|
||||
test_expect_success 'rebase --merge (L/U)' '
|
||||
# This is pathological -- use UTF-8 as intermediate form
|
||||
# to get ISO-8859-1 results.
|
||||
git-repo-config i18n.commitencoding ISO-8859-1 &&
|
||||
git repo-config i18n.logoutputencoding UTF-8 &&
|
||||
git-config i18n.commitencoding ISO-8859-1 &&
|
||||
git config i18n.logoutputencoding UTF-8 &&
|
||||
. ../t3901-8859-1.txt &&
|
||||
|
||||
git reset --hard side &&
|
||||
|
||||
@@ -28,7 +28,7 @@ test_expect_success \
|
||||
'git-diff-files -p >current'
|
||||
|
||||
# that's as far as it comes
|
||||
if [ "$(git repo-config --get core.filemode)" = false ]
|
||||
if [ "$(git config --get core.filemode)" = false ]
|
||||
then
|
||||
say 'filemode disabled on the filesystem'
|
||||
test_done
|
||||
|
||||
@@ -15,7 +15,7 @@ test_expect_success \
|
||||
tree=`git-write-tree` &&
|
||||
echo $tree'
|
||||
|
||||
if [ "$(git repo-config --get core.filemode)" = false ]
|
||||
if [ "$(git config --get core.filemode)" = false ]
|
||||
then
|
||||
say 'filemode disabled on the filesystem, using update-index --chmod=+x'
|
||||
test_expect_success \
|
||||
|
||||
@@ -73,7 +73,7 @@ test_expect_success setup '
|
||||
for i in 1 2; do echo $i; done >>dir/sub &&
|
||||
git update-index file0 dir/sub &&
|
||||
|
||||
git repo-config log.showroot false &&
|
||||
git config log.showroot false &&
|
||||
git commit --amend &&
|
||||
git show-branch
|
||||
'
|
||||
|
||||
@@ -31,7 +31,7 @@ test_expect_success setup \
|
||||
test_expect_success apply \
|
||||
'git-apply --index --stat --summary --apply test-patch'
|
||||
|
||||
if [ "$(git repo-config --get core.filemode)" = false ]
|
||||
if [ "$(git config --get core.filemode)" = false ]
|
||||
then
|
||||
say 'filemode disabled on the filesystem'
|
||||
else
|
||||
|
||||
@@ -30,19 +30,19 @@ test_expect_success \
|
||||
|
||||
test_expect_success \
|
||||
'verify-pack -v, packedGitWindowSize == 1 page' \
|
||||
'git-repo-config core.packedGitWindowSize 512 &&
|
||||
'git-config core.packedGitWindowSize 512 &&
|
||||
git-verify-pack -v "$pack1"'
|
||||
|
||||
test_expect_success \
|
||||
'verify-pack -v, packedGit{WindowSize,Limit} == 1 page' \
|
||||
'git-repo-config core.packedGitWindowSize 512 &&
|
||||
git-repo-config core.packedGitLimit 512 &&
|
||||
'git-config core.packedGitWindowSize 512 &&
|
||||
git-config core.packedGitLimit 512 &&
|
||||
git-verify-pack -v "$pack1"'
|
||||
|
||||
test_expect_success \
|
||||
'repack -a -d, packedGit{WindowSize,Limit} == 1 page' \
|
||||
'git-repo-config core.packedGitWindowSize 512 &&
|
||||
git-repo-config core.packedGitLimit 512 &&
|
||||
'git-config core.packedGitWindowSize 512 &&
|
||||
git-config core.packedGitLimit 512 &&
|
||||
commit2=`git-commit-tree $tree -p $commit1 </dev/null` &&
|
||||
git-update-ref HEAD $commit2 &&
|
||||
git-repack -a -d &&
|
||||
@@ -53,8 +53,8 @@ test_expect_success \
|
||||
|
||||
test_expect_success \
|
||||
'verify-pack -v, defaults' \
|
||||
'git-repo-config --unset core.packedGitWindowSize &&
|
||||
git-repo-config --unset core.packedGitLimit &&
|
||||
'git-config --unset core.packedGitWindowSize &&
|
||||
git-config --unset core.packedGitLimit &&
|
||||
git-verify-pack -v "$pack2"'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -106,7 +106,7 @@ export HOME ;# this way we force the victim/.git/config to be used.
|
||||
test_expect_success \
|
||||
'pushing with --force should be denied with denyNonFastforwards' '
|
||||
cd victim &&
|
||||
git-repo-config receive.denyNonFastforwards true &&
|
||||
git-config receive.denyNonFastforwards true &&
|
||||
cd .. &&
|
||||
git-update-ref refs/heads/master master^ &&
|
||||
git-send-pack --force ./victim/.git/ master &&
|
||||
|
||||
@@ -63,13 +63,13 @@ pull_to_client () {
|
||||
case "$heads" in *B*) echo $BTIP > .git/refs/heads/B;; esac
|
||||
git-symbolic-ref HEAD refs/heads/`echo $heads | sed -e 's/^\(.\).*$/\1/'`
|
||||
|
||||
test_expect_success "fsck" 'git-fsck-objects --full > fsck.txt 2>&1'
|
||||
test_expect_success "fsck" 'git-fsck --full > fsck.txt 2>&1'
|
||||
|
||||
test_expect_success 'check downloaded results' \
|
||||
'mv .git/objects/pack/pack-* . &&
|
||||
p=`ls -1 pack-*.pack` &&
|
||||
git-unpack-objects <$p &&
|
||||
git-fsck-objects --full'
|
||||
git-fsck --full'
|
||||
|
||||
test_expect_success "new object count after $number pull" \
|
||||
'idx=`echo pack-*.idx` &&
|
||||
@@ -98,7 +98,7 @@ pull_to_client () {
|
||||
mkdir client &&
|
||||
cd client &&
|
||||
git-init 2>> log2.txt &&
|
||||
git repo-config transfer.unpacklimit 0
|
||||
git config transfer.unpacklimit 0
|
||||
)
|
||||
|
||||
add A1
|
||||
@@ -145,7 +145,7 @@ test_expect_success "clone shallow object count (part 2)" '
|
||||
'
|
||||
|
||||
test_expect_success "fsck in shallow repo" \
|
||||
"(cd shallow; git-fsck-objects --full)"
|
||||
"(cd shallow; git-fsck --full)"
|
||||
|
||||
#test_done; exit
|
||||
|
||||
|
||||
@@ -22,14 +22,14 @@ test_expect_success "clone and setup child repos" '
|
||||
cd .. &&
|
||||
git clone . two &&
|
||||
cd two &&
|
||||
git repo-config branch.master.remote one &&
|
||||
git repo-config remote.one.url ../one/.git/ &&
|
||||
git repo-config remote.one.fetch refs/heads/master:refs/heads/one &&
|
||||
git config branch.master.remote one &&
|
||||
git config remote.one.url ../one/.git/ &&
|
||||
git config remote.one.fetch refs/heads/master:refs/heads/one &&
|
||||
cd .. &&
|
||||
git clone . three &&
|
||||
cd three &&
|
||||
git repo-config branch.master.remote two &&
|
||||
git repo-config branch.master.merge refs/heads/one &&
|
||||
git config branch.master.remote two &&
|
||||
git config branch.master.merge refs/heads/one &&
|
||||
mkdir -p .git/remotes &&
|
||||
{
|
||||
echo "URL: ../two/.git/"
|
||||
|
||||
@@ -17,7 +17,7 @@ reachable_via() {
|
||||
}
|
||||
|
||||
test_valid_repo() {
|
||||
git fsck-objects --full > fsck.log &&
|
||||
git fsck --full > fsck.log &&
|
||||
test `wc -l < fsck.log` = 0
|
||||
}
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ EOF
|
||||
|
||||
test_expect_success 'merge-msg test #3' '
|
||||
|
||||
git repo-config merge.summary true &&
|
||||
git config merge.summary true &&
|
||||
|
||||
git checkout master &&
|
||||
setdate &&
|
||||
@@ -138,7 +138,7 @@ EOF
|
||||
|
||||
test_expect_success 'merge-msg test #4' '
|
||||
|
||||
git repo-config merge.summary true &&
|
||||
git config merge.summary true &&
|
||||
|
||||
git checkout master &&
|
||||
setdate &&
|
||||
@@ -150,7 +150,7 @@ test_expect_success 'merge-msg test #4' '
|
||||
|
||||
test_expect_success 'merge-msg test #5' '
|
||||
|
||||
git repo-config merge.summary yes &&
|
||||
git config merge.summary yes &&
|
||||
|
||||
git checkout master &&
|
||||
setdate &&
|
||||
|
||||
@@ -1,89 +1,285 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# An example hook script to mail out commit update information.
|
||||
# It also blocks tags that aren't annotated.
|
||||
# It can also blocks tags that aren't annotated.
|
||||
# Called by git-receive-pack with arguments: refname sha1-old sha1-new
|
||||
#
|
||||
# To enable this hook:
|
||||
# (1) change the recipient e-mail address
|
||||
# (2) make this file executable by "chmod +x update".
|
||||
# To enable this hook, make this file executable by "chmod +x update".
|
||||
#
|
||||
# Config
|
||||
# ------
|
||||
# hooks.mailinglist
|
||||
# This is the list that all pushes will go to; leave it blank to not send
|
||||
# emails frequently. The log email will list every log entry in full between
|
||||
# the old ref value and the new ref value.
|
||||
# hooks.announcelist
|
||||
# This is the list that all pushes of annotated tags will go to. Leave it
|
||||
# blank to just use the mailinglist field. The announce emails list the
|
||||
# short log summary of the changes since the last annotated tag
|
||||
# hooks.allowunannotated
|
||||
# This boolean sets whether unannotated tags will be allowed into the
|
||||
# repository. By default they won't be.
|
||||
#
|
||||
# Notes
|
||||
# -----
|
||||
# All emails have their subjects prefixed with "[SCM]" to aid filtering.
|
||||
# All emails include the headers "X-Git-Refname", "X-Git-Oldrev",
|
||||
# "X-Git-Newrev", and "X-Git-Reftype" to enable fine tuned filtering and info.
|
||||
|
||||
project=$(cat $GIT_DIR/description)
|
||||
recipients="commit-list@somewhere.com commit-list@somewhereelse.com"
|
||||
# --- Constants
|
||||
EMAILPREFIX="[SCM] "
|
||||
LOGBEGIN="- Log -----------------------------------------------------------------"
|
||||
LOGEND="-----------------------------------------------------------------------"
|
||||
DATEFORMAT="%F %R %z"
|
||||
|
||||
ref_type=$(git cat-file -t "$3")
|
||||
# --- Command line
|
||||
refname="$1"
|
||||
oldrev="$2"
|
||||
newrev="$3"
|
||||
|
||||
# Only allow annotated tags in a shared repo
|
||||
# Remove this code to treat dumb tags the same as everything else
|
||||
case "$1","$ref_type" in
|
||||
refs/tags/*,commit)
|
||||
echo "*** Un-annotated tags are not allowed in this repo" >&2
|
||||
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
|
||||
exit 1;;
|
||||
refs/tags/*,tag)
|
||||
echo "### Pushing version '${1##refs/tags/}' to the masses" >&2
|
||||
# recipients="release-announce@somwehere.com announce@somewhereelse.com"
|
||||
;;
|
||||
esac
|
||||
# --- Safety check
|
||||
if [ -z "$GIT_DIR" ]; then
|
||||
echo "Don't run this script from the command line." >&2
|
||||
echo " (if you want, you could supply GIT_DIR then run" >&2
|
||||
echo " $0 <ref> <oldrev> <newrev>)" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# set this to 'cat' to get a very detailed listing.
|
||||
# short only kicks in when an annotated tag is added
|
||||
short='git shortlog'
|
||||
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
|
||||
echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# see 'date --help' for info on how to write this
|
||||
# The default is a human-readable iso8601-like format with minute
|
||||
# precision ('2006-01-25 15:58 +0100' for example)
|
||||
date_format="%F %R %z"
|
||||
# --- Config
|
||||
projectdesc=$(cat $GIT_DIR/description)
|
||||
recipients=$(git-repo-config hooks.mailinglist)
|
||||
announcerecipients=$(git-repo-config hooks.announcelist)
|
||||
allowunannotated=$(git-repo-config --bool hooks.allowunannotated)
|
||||
|
||||
(if expr "$2" : '0*$' >/dev/null
|
||||
then
|
||||
# new ref
|
||||
case "$1" in
|
||||
refs/tags/*)
|
||||
# a pushed and annotated tag (usually) means a new version
|
||||
tag="${1##refs/tags/}"
|
||||
if [ "$ref_type" = tag ]; then
|
||||
eval $(git cat-file tag $3 | \
|
||||
sed -n '4s/tagger \([^>]*>\)[^0-9]*\([0-9]*\).*/tagger="\1" ts="\2"/p')
|
||||
date=$(date --date="1970-01-01 00:00:00 $ts seconds" +"$date_format")
|
||||
echo "Tag '$tag' created by $tagger at $date"
|
||||
git cat-file tag $3 | sed -n '5,$p'
|
||||
echo
|
||||
fi
|
||||
prev=$(git describe "$3^" | sed 's/-g.*//')
|
||||
# the first tag in a repo will yield no $prev
|
||||
if [ -z "$prev" ]; then
|
||||
echo "Changes since the dawn of time:"
|
||||
git rev-list --pretty $3 | $short
|
||||
else
|
||||
echo "Changes since $prev:"
|
||||
git rev-list --pretty $prev..$3 | $short
|
||||
echo ---
|
||||
git diff --stat $prev..$3
|
||||
echo ---
|
||||
# --- Check types
|
||||
newrev_type=$(git-cat-file -t "$newrev")
|
||||
|
||||
case "$refname","$newrev_type" in
|
||||
refs/tags/*,commit)
|
||||
# un-annoted tag
|
||||
refname_type="tag"
|
||||
short_refname=${refname##refs/tags/}
|
||||
if [ $allowunannotated != "true" ]; then
|
||||
echo "*** The un-annotated tag, $short_refname is not allowed in this repository" >&2
|
||||
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
refs/heads/*)
|
||||
branch="${1##refs/heads/}"
|
||||
echo "New branch '$branch' available with the following commits:"
|
||||
git-rev-list --pretty "$3" $(git-rev-parse --not --all)
|
||||
refs/tags/*,tag)
|
||||
# annotated tag
|
||||
refname_type="annotated tag"
|
||||
short_refname=${refname##refs/tags/}
|
||||
# change recipients
|
||||
if [ -n "$announcerecipients" ]; then
|
||||
recipients="$announcerecipients"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
else
|
||||
base=$(git-merge-base "$2" "$3")
|
||||
case "$base" in
|
||||
"$2")
|
||||
git diff --stat "$3" "^$base"
|
||||
echo
|
||||
echo "New commits:"
|
||||
refs/heads/*,commit)
|
||||
# branch
|
||||
refname_type="branch"
|
||||
short_refname=${refname##refs/heads/}
|
||||
;;
|
||||
refs/remotes/*,commit)
|
||||
# tracking branch
|
||||
refname_type="tracking branch"
|
||||
short_refname=${refname##refs/remotes/}
|
||||
# Should this even be allowed?
|
||||
echo "*** Push-update of tracking branch, $refname. No email generated." >&2
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Rebased ref, commits from common ancestor:"
|
||||
# Anything else (is there anything else?)
|
||||
echo "*** Update hook: unknown type of update, \"$newrev_type\", to ref $refname" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
git-rev-list --pretty "$3" "^$base"
|
||||
fi) |
|
||||
mail -s "$project: Changes to '${1##refs/heads/}'" $recipients
|
||||
esac
|
||||
|
||||
# Check if we've got anyone to send to
|
||||
if [ -z "$recipients" ]; then
|
||||
# If the email isn't sent, then at least give the user some idea of what command
|
||||
# would generate the email at a later date
|
||||
echo "*** No recipients found - no email will be sent, but the push will continue" >&2
|
||||
echo "*** for $0 $1 $2 $3" >&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# --- Email parameters
|
||||
committer=$(git show --pretty=full -s $newrev | grep "^Commit: " | sed -e "s/^Commit: //")
|
||||
describe=$(git describe $newrev 2>/dev/null)
|
||||
if [ -z "$describe" ]; then
|
||||
describe=$newrev
|
||||
fi
|
||||
|
||||
# --- Email (all stdout will be the email)
|
||||
(
|
||||
# Generate header
|
||||
cat <<-EOF
|
||||
From: $committer
|
||||
To: $recipients
|
||||
Subject: ${EMAILPREFIX}$projectdesc $refname_type, $short_refname now at $describe
|
||||
X-Git-Refname: $refname
|
||||
X-Git-Reftype: $refname_type
|
||||
X-Git-Oldrev: $oldrev
|
||||
X-Git-Newrev: $newrev
|
||||
|
||||
Hello,
|
||||
|
||||
This is an automated email from the git hooks/update script, it was
|
||||
generated because a ref change was pushed to the repository.
|
||||
|
||||
Updating $refname_type, $short_refname,
|
||||
EOF
|
||||
|
||||
case "$refname_type" in
|
||||
"tracking branch"|branch)
|
||||
if expr "$oldrev" : '0*$' >/dev/null
|
||||
then
|
||||
# If the old reference is "0000..0000" then this is a new branch
|
||||
# and so oldrev is not valid
|
||||
echo " as a new $refname_type"
|
||||
echo " to $newrev ($newrev_type)"
|
||||
echo ""
|
||||
echo $LOGBEGIN
|
||||
# This shows all log entries that are not already covered by
|
||||
# another ref - i.e. commits that are now accessible from this
|
||||
# ref that were previously not accessible
|
||||
git-rev-list --pretty $newref $(git-rev-parse --not --all)
|
||||
echo $LOGEND
|
||||
else
|
||||
# oldrev is valid
|
||||
oldrev_type=$(git-cat-file -t "$oldrev")
|
||||
|
||||
# Now the problem is for cases like this:
|
||||
# * --- * --- * --- * (oldrev)
|
||||
# \
|
||||
# * --- * --- * (newrev)
|
||||
# i.e. there is no guarantee that newrev is a strict subset
|
||||
# of oldrev - (would have required a force, but that's allowed).
|
||||
# So, we can't simply say rev-list $oldrev..$newrev. Instead
|
||||
# we find the common base of the two revs and list from there
|
||||
baserev=$(git-merge-base $oldrev $newrev)
|
||||
|
||||
# Commit with a parent
|
||||
for rev in $(git-rev-list $newrev ^$baserev)
|
||||
do
|
||||
revtype=$(git-cat-file -t "$rev")
|
||||
echo " via $rev ($revtype)"
|
||||
done
|
||||
if [ "$baserev" = "$oldrev" ]; then
|
||||
echo " from $oldrev ($oldrev_type)"
|
||||
else
|
||||
echo " based on $baserev"
|
||||
echo " from $oldrev ($oldrev_type)"
|
||||
echo ""
|
||||
echo "This ref update crossed a branch point; i.e. the old rev is not a strict subset"
|
||||
echo "of the new rev. This occurs, when you --force push a change in a situation"
|
||||
echo "like this:"
|
||||
echo ""
|
||||
echo " * -- * -- B -- O -- O -- O ($oldrev)"
|
||||
echo " \\"
|
||||
echo " N -- N -- N ($newrev)"
|
||||
echo ""
|
||||
echo "Therefore, we assume that you've already had alert emails for all of the O"
|
||||
echo "revisions, and now give you all the revisions in the N branch from the common"
|
||||
echo "base, B ($baserev), up to the new revision."
|
||||
fi
|
||||
echo ""
|
||||
echo $LOGBEGIN
|
||||
git-rev-list --pretty $newrev ^$baserev
|
||||
echo $LOGEND
|
||||
echo ""
|
||||
echo "Diffstat:"
|
||||
git-diff-tree --no-color --stat -M -C --find-copies-harder $newrev ^$baserev
|
||||
fi
|
||||
;;
|
||||
"annotated tag")
|
||||
# Should we allow changes to annotated tags?
|
||||
if expr "$oldrev" : '0*$' >/dev/null
|
||||
then
|
||||
# If the old reference is "0000..0000" then this is a new atag
|
||||
# and so oldrev is not valid
|
||||
echo " to $newrev ($newrev_type)"
|
||||
else
|
||||
echo " to $newrev ($newrev_type)"
|
||||
echo " from $oldrev"
|
||||
fi
|
||||
|
||||
# If this tag succeeds another, then show which tag it replaces
|
||||
prevtag=$(git describe $newrev^ 2>/dev/null | sed 's/-g.*//')
|
||||
if [ -n "$prevtag" ]; then
|
||||
echo " replaces $prevtag"
|
||||
fi
|
||||
|
||||
# Read the tag details
|
||||
eval $(git cat-file tag $newrev | \
|
||||
sed -n '4s/tagger \([^>]*>\)[^0-9]*\([0-9]*\).*/tagger="\1" ts="\2"/p')
|
||||
tagged=$(date --date="1970-01-01 00:00:00 +0000 $ts seconds" +"$DATEFORMAT")
|
||||
|
||||
echo " tagged by $tagger"
|
||||
echo " on $tagged"
|
||||
|
||||
echo ""
|
||||
echo $LOGBEGIN
|
||||
echo ""
|
||||
|
||||
if [ -n "$prevtag" ]; then
|
||||
git rev-list --pretty=short "$prevtag..$newrev" | git shortlog
|
||||
else
|
||||
git rev-list --pretty=short $newrev | git shortlog
|
||||
fi
|
||||
|
||||
echo $LOGEND
|
||||
echo ""
|
||||
;;
|
||||
*)
|
||||
# By default, unannotated tags aren't allowed in; if
|
||||
# they are though, it's debatable whether we would even want an
|
||||
# email to be generated; however, I don't want to add another config
|
||||
# option just for that.
|
||||
#
|
||||
# Unannotated tags are more about marking a point than releasing
|
||||
# a version; therefore we don't do the shortlog summary that we
|
||||
# do for annotated tags above - we simply show that the point has
|
||||
# been marked, and print the log message for the marked point for
|
||||
# reference purposes
|
||||
#
|
||||
# Note this section also catches any other reference type (although
|
||||
# there aren't any) and deals with them in the same way.
|
||||
if expr "$oldrev" : '0*$' >/dev/null
|
||||
then
|
||||
# If the old reference is "0000..0000" then this is a new tag
|
||||
# and so oldrev is not valid
|
||||
echo " as a new $refname_type"
|
||||
echo " to $newrev ($newrev_type)"
|
||||
else
|
||||
echo " to $newrev ($newrev_type)"
|
||||
echo " from $oldrev"
|
||||
fi
|
||||
echo ""
|
||||
echo $LOGBEGIN
|
||||
git-show --no-color --root -s $newrev
|
||||
echo $LOGEND
|
||||
echo ""
|
||||
;;
|
||||
esac
|
||||
|
||||
# Footer
|
||||
cat <<-EOF
|
||||
|
||||
hooks/update
|
||||
---
|
||||
Git Source Code Management System
|
||||
$0 $1 \\
|
||||
$2 \\
|
||||
$3
|
||||
EOF
|
||||
#) | cat >&2
|
||||
) | /usr/sbin/sendmail -t
|
||||
|
||||
# --- Finished
|
||||
exit 0
|
||||
|
||||
@@ -351,7 +351,7 @@ int git_status_config(const char *k, const char *v)
|
||||
wt_status_use_color = git_config_colorbool(k, v);
|
||||
return 0;
|
||||
}
|
||||
if (!strncmp(k, "status.color.", 13) || !strncmp(k, "color.status", 13)) {
|
||||
if (!strncmp(k, "status.color.", 13) || !strncmp(k, "color.status.", 13)) {
|
||||
int slot = parse_status_slot(k, 13);
|
||||
color_parse(v, k, wt_status_colors[slot]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user