Julian Phillips [Wed, 30 May 2007 01:02:51 +0000 (02:02 +0100)]
builtin-fetch2: sort out merge flagging in canon_ref_maps
Sort out the flagging of which refs get marked for commit in
canon_ref_maps, and update callers to provide the required information
(basically whether the first ref in the list was globbed or not).
Julian Phillips [Mon, 28 May 2007 23:32:46 +0000 (00:32 +0100)]
fetch-pack: fix compilation
Due to changes in other parts of the codebase, builtin-fetch-pack.c
stopped compiling. Fix the problems.
Julian Phillips [Mon, 28 May 2007 23:31:54 +0000 (00:31 +0100)]
builtin-fetch2: fix compilation
Due to changes in other parts of the codebase builtin-fetch2.c stopped
compiling. Fixup the problems.
Julian Phillips [Mon, 28 May 2007 17:23:43 +0000 (18:23 +0100)]
builtin-fetch2: add some extra comments
Add some comments to get_remote_url, including adding a TODO comment
about parsing the url from a branches file.
Julian Phillips [Mon, 28 May 2007 14:19:18 +0000 (15:19 +0100)]
builtin-fetch2: actually restore HEAD when necessary
When then HEAD has been changed and it shouldn't have been, rather
than simply printing out what the HEAD is and should be, actually put
it back using update_ref.
Julian Phillips [Mon, 28 May 2007 14:11:00 +0000 (15:11 +0100)]
builtin-fetch2: respond to --tags
When --tags is specified then add all the tags that are present at the
remote, but not locally to the list of refs to be fetched.
Julian Phillips [Sun, 29 Apr 2007 20:08:56 +0000 (21:08 +0100)]
git-fetch2: use path_list to prevent tag being fetched twice
Use a path_list to make sure that the tag auto-following code doesn't
add the same tag to the ref_map list twice (this can happen with http
fetching, where the tag object may have already been fetched).
Julian Phillips [Sun, 29 Apr 2007 03:02:43 +0000 (04:02 +0100)]
git-fetch2: use builtin-http-fetch to fetch refs via curl
This adds support for fetching refs via curl using the functionality
of builtin-http-fetch.
Julian Phillips [Sun, 29 Apr 2007 02:32:16 +0000 (03:32 +0100)]
http-fetch: make http-fetch a builtin
Make http-fetch a builtin, so that the builtin fetch can reuse the
code without having to fork a new process. Also add some functions to
allow the use of the internals without having to go through the main
function.
Julian Phillips [Sun, 22 Apr 2007 21:58:20 +0000 (22:58 +0100)]
git-fetch2: actually process command-line refspecs
Implement parsing and processing of command line refspecs, including
ones that don't include a local branch name.
Julian Phillips [Sun, 22 Apr 2007 19:11:02 +0000 (20:11 +0100)]
git-fetch2: correct typo in cmd_fetch
Correct a typo in cmd_fetch that meant that the refs list passed to
do_fetch was always NULL when ref_count was > 0.
Julian Phillips [Sun, 22 Apr 2007 16:45:10 +0000 (17:45 +0100)]
git-fetch2: wrap knowledge about remote repo into struct remote
Rather than passing url and nick around, use a single struct remote,
at the same time use an ops struct and a mapping structure rather than
large if statements to determine correct functions to get information
from the remote repo.
Julian Phillips [Wed, 18 Apr 2007 00:35:56 +0000 (01:35 +0100)]
git-fetch2: replace read_ref with path_list_has_path
The use of read_ref in filtering the list of tags to fetch turned out
to be very slow. By replacing it with the path_list_has_path
mechanism from show-ref's exclude_existing function the time taken for
a null fetch (i.e. a fetch that simply discovers there are no changes)
dropped to a quarter of it's previous value.
Julian Phillips [Mon, 16 Apr 2007 07:36:41 +0000 (08:36 +0100)]
git-fetch2: tidy up the code slightly
Use sha1_to_hex to remove the need for print_sha1, and also remote the
print_sha1 function.
Also update TODO comment to not cause compiler warning.
Julian Phillips [Sun, 15 Apr 2007 20:03:31 +0000 (21:03 +0100)]
git-fetch2: free memory in fetch_refs_via_pack
Free the memory that was allocated in fetch_refs_via_pack ...
Julian Phillips [Sun, 15 Apr 2007 16:09:02 +0000 (17:09 +0100)]
git-fetch2: improve canon_ref_maps when canonising the default refs list
This populates the list of merge_branches from the config settings,
but it still doesn't prevent a globbed list from being auto-merged if
nothing relevant is found in the config.
Julian Phillips [Sat, 14 Apr 2007 22:18:31 +0000 (23:18 +0100)]
git-fetch2: fix tag fetching to fetch tag objects
When autofollowing tags, only refs that point at a commit that already
exists in the local repo are added to the list of refs to fetch. Full
tags will fail this test since the tag object they point to will not
have been fetched. However the commit (tag^{}) ref is also given in
the list from the remote repo, and that _will_ be able to pass the
commit check (provided that the local repo actually has the relevant
commit). However we still want to make the local ref point at the tag
object (and also fetch the tag object itself) - this means that rather
than just removing the ^{} from the ref name, we also need to lookup
the sha1 of the tag ref and use that instead.
Julian Phillips [Sat, 14 Apr 2007 22:12:11 +0000 (23:12 +0100)]
git-fetch2: set the default reflog action
Set the default reflog action to be "fetch <argument list>" rather
than simply "(reflog update)".
Julian Phillips [Sat, 14 Apr 2007 19:42:15 +0000 (20:42 +0100)]
git-fetch2: start implementing canon_ref_maps function
Implement the function for canonising ref_maps. Not complete yet
though, it still needs to determine the list of merge heads when being
called in default mode.
Julian Phillips [Sat, 14 Apr 2007 19:40:17 +0000 (20:40 +0100)]
git-fetch2: move struct ref_map and helper functions
Move the definition of struct ref_map to the beginning of the file so
that they are easier to find, rather than being in the middle of the
fetch functions.
Julian Phillips [Mon, 9 Apr 2007 22:31:33 +0000 (23:31 +0100)]
git-fetch2: use hashcpy instead of memcpy
Change the single instance of memcpy(a, b, 20) into hashcpy(a, b).
Julian Phillips [Mon, 9 Apr 2007 22:27:15 +0000 (23:27 +0100)]
git-fetch2: add automatic tag following code
Add code to automatically follow tags after the main fetch. Currently
this does not include the "case "$reflist" in */refs/*)" check.
Julian Phillips [Mon, 9 Apr 2007 22:01:33 +0000 (23:01 +0100)]
git-fetch2: fix typo in get_refs_via_curl
Fix a typo in get_refs_via_curl that would have caused a null pointer
deference if the remote url required curl for getting the remote refs
list.
Julian Phillips [Mon, 9 Apr 2007 19:37:48 +0000 (20:37 +0100)]
git-fetch2: rework the get_expanded_map mechanism to cache refs list
We want the remote refs list to be available for reuse (e.g. by tag
following code), so rewrite the get_expanded_map mechanism so that
remote refs list is cached and also exposed (rather than hidden inside
the expansion code).
Julian Phillips [Mon, 9 Apr 2007 19:34:23 +0000 (20:34 +0100)]
git-fetch2: remove debug output from fetch_refs_via_pack
Remove some unwanted and unneeded debug output from
fetch_refs_via_pack.
Julian Phillips [Mon, 9 Apr 2007 18:42:39 +0000 (19:42 +0100)]
git-fetch2: add comment about possible memory leak
Add a TODO comment as a reminder to check a potential memory leak.
Julian Phillips [Mon, 9 Apr 2007 18:27:53 +0000 (19:27 +0100)]
git-fetch2: update the local refs and write FETCH_HEAD
This adds the code to update the local refs based on the fetched ones,
and writes the information about what was fetched into FETCH_HEAD.
All branches are marked not-for-merge, but that is because no refs are
marked for merging yet (i.e. not a failure in the code that writes
FETCH_HEAD).
Julian Phillips [Mon, 9 Apr 2007 16:25:07 +0000 (17:25 +0100)]
git-fetch2: use the return of read_ref to determine if orig_head is valid
If read_ref does not return 0, then orig_head is not valid, so set it
back to NULL. This stops the "Cannot fetch into the current branch"
check from triggering when fetching into an empty repo.
Julian Phillips [Mon, 9 Apr 2007 16:23:08 +0000 (17:23 +0100)]
git-fetch2: use sha1 utility functions
rather than using memcmp directly use the sha1 utility functions
is_null_sha1 and hashcmp.
Julian Phillips [Mon, 9 Apr 2007 16:21:18 +0000 (17:21 +0100)]
fix git-fetch2 usage of fetch-pack
git-fetch2 was explictly setting the unpack_limit to 0. This variable
should not have been exposed in the setup function, but rather
controlled by the keep_pack setting, as it is for the command line
options.
Changing this makes git-fetch2 index and use packs like git-fetch
does, rather than always unpacking them.
Julian Phillips [Sun, 1 Apr 2007 20:02:15 +0000 (21:02 +0100)]
git-fetch2: correct function definitions
change all the functions defined like:
... function (args) {
...
}
to be defined like this:
... function (args)
{
...
}
Julian Phillips [Sun, 1 Apr 2007 19:58:41 +0000 (20:58 +0100)]
git-fetch2: call into fetch-pack to actually fetch the new objects
Call into fetch-pack to get the objects wanted to update the refs
(assuming that the protocol is pack based).
Also fix a bug in expand_via_connect (git_connect modifies the dest
argument) so that the url is not destroyed before we try to fetch the
objects.
(also some TODOs added)
Julian Phillips [Sun, 1 Apr 2007 19:52:52 +0000 (20:52 +0100)]
fetch-pack: make fetch-pack a builtin
Make fetch-pack a builtin, so that the builtin fetch can reuse the
code without having to fork a new process. Also add some functions to
allow the use of the internals without having to go through the main
function.
Julian Phillips [Mon, 26 Mar 2007 20:26:55 +0000 (21:26 +0100)]
Fix Makefile breakage when building without NO_CURL=..
The previous commit "git-fetch2: add expand_via_curl function" updated
the Makefile to build git-fetch2 with or without curl. However this
broke a clean build due to changing the wrong variable.
Julian Phillips [Sun, 25 Mar 2007 13:18:35 +0000 (14:18 +0100)]
git-fetch2: tidy up do_fetch
Tidy up do_fetch by moving variable declarations to top, and
correcting a couple of comments.
Julian Phillips [Sat, 24 Mar 2007 20:09:59 +0000 (20:09 +0000)]
git-fetch2: clean up warnings
Tidy up the code a bit, so that it builds without warnings.
Julian Phillips [Sat, 24 Mar 2007 20:05:35 +0000 (20:05 +0000)]
git-fetch2: add expand_via_curl function
Add the ability to get the list of expanded refs via curl, which
should allow the use of http://, https:// and ftp:// protocols.
This makes get_expanded_map almost complete, the only protocol now
missing is rsync. However, there is still no support for explicit
mappings (i.e. not using ../*:.../*) yet.
Also stopped mallocing the sha1s separately, and fixed some overruns
when using malloc + sprintf.
Julian Phillips [Mon, 19 Mar 2007 23:20:28 +0000 (23:20 +0000)]
git-fetch2: fix thinko in get_default_remote
We can't call resolve_ref with reading == 1 as then we get an error
if HEAD points at a non-existant ref. However we want to be able to
fetch in an empty repo (all we need is that the user has added an
appropriate remote entry somewhere).
Julian Phillips [Mon, 19 Mar 2007 23:17:48 +0000 (23:17 +0000)]
git-fetch2: remove ref_maps that are not interesting
Once we have the full list of ref_maps, remove any where the local
and remote sha1s are the same - as we don't need to do anything for
them.
Julian Phillips [Mon, 19 Mar 2007 03:44:29 +0000 (03:44 +0000)]
git-fetch2: get semi-complete ref_map path for pack based protocols
Implement a semi-complete path for getting a completed ref_map list
for pack-based protocols (i.e. anything git-connect will process).
This only works if all the correct conditions are met (e.g. no refs
on command line, not using remotes or branches files) - hence
semi-complete.
Also, the pack-based protocol specific code in get_extended_map
should be moved into a separate function ...
Julian Phillips [Sun, 18 Mar 2007 23:41:41 +0000 (23:41 +0000)]
git-fetch2: start adding ability to determine ref mapping
Add the beginning of the framwork for deriving the mapping of remote
to local references. Currently only explict maps in the config file
are actually parsed.
Julian Phillips [Sun, 18 Mar 2007 19:28:40 +0000 (19:28 +0000)]
git-fetch2: add do_fetch
Add a main do_fetch function to actually perform the fetch. This
function is currently a long way from actually working.
Julian Phillips [Sun, 18 Mar 2007 19:03:24 +0000 (19:03 +0000)]
git-fetch2: add get_remote_url function
Add a get_remote_url function based on the function of the same name
in git-parse-remote.sh. This function currently doesn't process
files in branches, only the config and remotes.
There is a slight change in behaviour against the original function.
If the specified name does not contain a '/' and cannot be resolved
as a remote name then NULL is returned. This means that
"git fetch2 foo" will return an unknown remote error if foo is not a
remote name, whereas "git fetch foo" would look for a git repo in a
directory "./foo". "git fetch2 ./foo" and "git fetch ./foo" both
behave the same though, and I think the new behaviour to be better ...
Julian Phillips [Sun, 18 Mar 2007 03:32:22 +0000 (03:32 +0000)]
git-fetch2: add get_default_remote
This adds a function get_default_remote that should be equivalent to
the shell function of the same name in git-remote-parse.sh.
(The C function actually has more error checking)
Julian Phillips [Sun, 18 Mar 2007 03:29:42 +0000 (03:29 +0000)]
git-fetch2: parse command line arguments
This parses the command line arguments as they are specified in the
man page. This is actually a regression against git-fetch.sh, which
supports abbreviated long arguments - but if that behaviour is desired
it can be added later.
Julian Phillips [Wed, 14 Mar 2007 23:23:32 +0000 (23:23 +0000)]
git-fetch2: create new builtin command
This adds a new command (fetch2) implemented as a builtin. Though
all the command currently does is complain about its arguments.
Junio C Hamano [Tue, 29 May 2007 08:24:20 +0000 (01:24 -0700)]
Merge branch 'db/remote'
* db/remote:
Move refspec pattern matching to match_refs().
Update local tracking refs when pushing
Add handlers for fetch-side configuration of remotes.
Move refspec parser from connect.c and cache.h to remote.{c,h}
Move remote parsing into a library file out of builtin-push.
Junio C Hamano [Tue, 29 May 2007 08:16:28 +0000 (01:16 -0700)]
Merge branch 'dh/repack' (early part)
* 'dh/repack' (early part):
Ensure git-repack -a -d --max-pack-size=N deletes correct packs
pack-objects: clarification & option checks for --max-pack-size
git-repack --max-pack-size: add option parsing to enable feature
git-repack --max-pack-size: split packs as asked by write_{object,one}()
git-repack --max-pack-size: write_{object,one}() respect pack limit
git-repack --max-pack-size: new file statics and code restructuring
Alter sha1close() 3rd argument to request flush only
Junio C Hamano [Tue, 29 May 2007 07:49:23 +0000 (00:49 -0700)]
Merge branch 'np/delta'
* np/delta:
update diff-delta.c copyright
improve delta long block matching with big files
Junio C Hamano [Tue, 29 May 2007 07:41:50 +0000 (00:41 -0700)]
Merge branch 'jc/nodelta'
* jc/nodelta:
builtin-pack-objects: remove unnecessary code for no-delta
Teach "delta" attribute to pack-objects.
pack-objects: pass fullname down to add_object_entry()
Junio C Hamano [Tue, 29 May 2007 07:41:36 +0000 (00:41 -0700)]
Merge branch 'ar/verbose'
* ar/verbose:
Add another verbosity level to git-fetch
Verbose connect messages to show the IP addresses used
Junio C Hamano [Tue, 29 May 2007 07:41:22 +0000 (00:41 -0700)]
Merge branch 'ar/run'
* ar/run:
Allow environment variables to be unset in the processes started by run_command
Add ability to specify environment extension to run_command
Add run_command_v_opt_cd: chdir into a directory before exec
Junio C Hamano [Tue, 29 May 2007 07:38:52 +0000 (00:38 -0700)]
Merge branch 'ar/mergestat'
* ar/mergestat:
Add a configuration option to control diffstat after merge
Junio C Hamano [Tue, 29 May 2007 07:37:23 +0000 (00:37 -0700)]
Merge branch 'rr/cvsexport'
* rr/cvsexport:
Add option to cvs update before export
Junio C Hamano [Tue, 29 May 2007 07:27:24 +0000 (00:27 -0700)]
Merge branch 'maint'
* maint:
cvsserver: Fix some typos in asciidoc documentation
cvsserver: Note that CVS_SERVER can also be specified as method variable
cvsserver: Correct inetd.conf example in asciidoc documentation
user-manual: fixed typo in example
Add test case for $Id$ expanded in the repository
git-svn: avoid md5 calculation entirely if SVN doesn't provide one
Makefile: Remove git-fsck and git-verify-pack from PROGRAMS
Fix stupid typo in lookup_tag()
git-gui: Guess our share/git-gui/lib path at runtime if possible
Correct key bindings to Control-<foo>
git-gui: Tighten internal pattern match for lib/ directory
Frank Lichtenheld [Sun, 27 May 2007 12:33:10 +0000 (14:33 +0200)]
cvsserver: Handle 'cvs login'
Since this is a trivial variation of the general pserver
authentication, there is really no reason not to support
it.
Signed-off-by: Frank Lichtenheld <frank@lichtenheld.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Frank Lichtenheld [Sun, 27 May 2007 12:33:09 +0000 (14:33 +0200)]
t9400: Work around CVS' deficiencies
If we are too fast with our changes, the file in
the working copy might still have the same mtime
as noted in the CVS/Entries. This will cause CVS
to happily report to the server that the file is
unmodified which can lead to data loss (and in
our case test failure).
CVS sucks!
Work around that by sleeping for a second.
Signed-off-by: Frank Lichtenheld <frank@lichtenheld.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Shawn O. Pearce [Sun, 27 May 2007 03:09:27 +0000 (23:09 -0400)]
Allow contrib new-workdir to link into bare repositories
On one particular system I like to keep a cluster of bare Git
repositories and spawn new-workdirs off of them. Since the bare
repositories don't have working directories associated with them
they don't have a .git/ subdirectory that hosts the repository we
are linking to.
Using a bare repository as the backing repository for a workdir
created by this script does require that the user delete core.bare
from the repository's configuration file, so that Git auto-senses
the bareness of a repository based on pathname information, and
not based on the config file.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Junio C Hamano [Mon, 28 May 2007 22:48:07 +0000 (15:48 -0700)]
mailsplit: fix for more than one input files
Earlier commit d63bd9a broke the case where more than one input
files are fed to mailsplit by not incrementing the base counter
when splitting second and subsequent input files. This should
fix it.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Frank Lichtenheld [Sun, 27 May 2007 12:33:08 +0000 (14:33 +0200)]
cvsserver: Fix some typos in asciidoc documentation
Signed-off-by: Frank Lichtenheld <frank@lichtenheld.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Frank Lichtenheld [Sun, 27 May 2007 12:33:07 +0000 (14:33 +0200)]
cvsserver: Note that CVS_SERVER can also be specified as method variable
Reasonably new versions of the cvs CLI client allow one to
specifiy CVS_SERVER as a method variable directly in
CVSROOT. This is way more convinient than using an
environment variable since it gets saved in CVS/Root.
Since I only discovered this by accident I guess there
might be others out there that learnt CVS on the 1.11
series (or even earlier) and profit from such a note
about cvs improvements in the last couple years.
Signed-off-by: Frank Lichtenheld <frank@lichtenheld.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Frank Lichtenheld [Sun, 27 May 2007 12:33:06 +0000 (14:33 +0200)]
cvsserver: Correct inetd.conf example in asciidoc documentation
While the given example worked, it made us look rather
incompetent. Give the correct reason why one needs the
more complex syntax and change the example to reflect
that.
Signed-off-by: Frank Lichtenheld <frank@lichtenheld.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Steffen Prohaska [Sat, 26 May 2007 19:16:27 +0000 (21:16 +0200)]
user-manual: fixed typo in example
Signed-off-by: Steffen Prohaska <prohaska@zib.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Andy Parkins [Sun, 27 May 2007 10:52:11 +0000 (11:52 +0100)]
Add test case for $Id$ expanded in the repository
This test case would have caught the bug fixed by revision
c23290d5.
It puts various forms of $Id$ into a file in the repository,
without allowing git to collapse them to uniformity. Then enables the
$Id$ expansion on checkout, and checks that what is checked out has
coped with the various forms.
Signed-off-by: Andy Parkins <andyparkins@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Junio C Hamano [Tue, 29 May 2007 06:54:26 +0000 (23:54 -0700)]
Merge branch 'maint-1.5.1' into maint
* maint-1.5.1:
git-svn: avoid md5 calculation entirely if SVN doesn't provide one
Fix stupid typo in lookup_tag()
Eric Wong [Sun, 27 May 2007 22:59:01 +0000 (15:59 -0700)]
git-svn: avoid md5 calculation entirely if SVN doesn't provide one
There's no point in calculating an MD5 if we're not going to use
it. We'll also avoid the possibility of there being a bug in the
Perl MD5 library not being able to handle zero-sized files.
This is a followup to
20b3d206acbbb042c7ad5f42d36ff8d036a538c5,
which allows us to track repositories that do not provide MD5
checksums.
Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Junio C Hamano [Tue, 29 May 2007 03:23:10 +0000 (20:23 -0700)]
Merge branch 'maint' of git://repo.or.cz/git-gui into maint
* 'maint' of git://repo.or.cz/git-gui:
git-gui: Guess our share/git-gui/lib path at runtime if possible
Correct key bindings to Control-<foo>
git-gui: Tighten internal pattern match for lib/ directory
Nguyen Thai Ngoc Duy [Tue, 29 May 2007 02:05:43 +0000 (22:05 -0400)]
Makefile: Remove git-fsck and git-verify-pack from PROGRAMS
Those are builtins. Remove them from PROGRAMS variable
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Johan Herland [Mon, 28 May 2007 23:21:25 +0000 (01:21 +0200)]
Fix stupid typo in lookup_tag()
Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Shawn O. Pearce [Sun, 27 May 2007 04:03:37 +0000 (00:03 -0400)]
git-gui: Guess our share/git-gui/lib path at runtime if possible
Johannes Sixt asked me to try to avoid embedding the runtime location
of git-gui's library directory in the executable script. Not embedding
it helps the MinGW to be relocatable to another directory should a user
wish to install the programs in a directory other than the location the
packager wanted them to be installed into.
Most of this is a hack. We try to determine if the path of our master
git-gui script will be able to locate the lib by ../share/git-gui/lib.
This should be true if $(gitexecdir) and $(libdir) have the same prefix.
If they do then we defer the assignment of $(libdir) until runtime, and
we get it from $argv0 rather than embedding it into the script itself.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Nicolas Pitre [Sat, 26 May 2007 02:16:27 +0000 (22:16 -0400)]
update diff-delta.c copyright
There is actually nothing left from the original LibXDiff code I used
over 2 years ago, and even the GIT implementation has diverged quite a
bit from LibXDiff's at this point. Let's update the copyright notice
to better reflect that fact.
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Nicolas Pitre [Sat, 26 May 2007 01:38:58 +0000 (21:38 -0400)]
improve delta long block matching with big files
Martin Koegler noted that create_delta() performs a new hash lookup
after every block copy encoding which are currently limited to 64KB.
In case of larger identical blocks, the next hash lookup would normally
point to the next 64KB block in the reference buffer and multiple block
copy operations will be consecutively encoded.
It is however possible that the reference buffer be sparsely indexed if
hash buckets have been trimmed down in create_delta_index() when hashing
of the reference buffer isn't well balanced. In that case the hash
lookup following a block copy might fail to match anything and the fact
that the reference buffer still matches beyond the previous 64KB block
will be missed.
Let's rework the code so that buffer comparison isn't bounded to 64KB
anymore. The match size should be as large as possible up front and
only then should multiple block copy be encoded to cover it all.
Also, fewer hash lookups will be performed in the end.
According to Martin, this patch should reduce his 92MB pack down to 75MB
with the dataset he has.
Tests performed on the Linux kernel repo show a slightly smaller pack and
a slightly faster repack.
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Linus Torvalds [Sat, 26 May 2007 16:25:31 +0000 (09:25 -0700)]
Make the pack-refs interfaces usable from outside
This just basically creates a "pack_refs()" function that could be used by
anybody. You pass it in the flags you want as a bitmask (PACK_REFS_ALL and
PACK_REFS_PRUNE), and it will do all the heavy lifting.
Of course, it's still static, and it's all in the builtin-pack-refs.c
file, so it's not actually visible to the outside, but the next step would
be to just move it all to a library file (probably refs.c) and expose it.
Then we could easily make "git gc" do this too.
While I did it, I also made it check the return value of the fflush and
fsync stage, to make sure that we don't overwrite the old packed-refs file
with something that got truncated due to write errors!
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Junio C Hamano [Sun, 27 May 2007 01:53:22 +0000 (18:53 -0700)]
Merge branch 'maint'
* maint:
Fix git-svn to handle svn not reporting the md5sum of a file, and test.
Fix mishandling of $Id$ expanded in the repository copy in convert.c
More echo "$user_message" fixes.
Add tests for the last two fixes.
git-commit: use printf '%s\n' instead of echo on user-supplied strings
git-am: use printf instead of echo on user-supplied strings
Documentation: Add definition of "evil merge" to GIT Glossary
Replace the last 'dircache's by 'index'
Documentation: Clean up links in GIT Glossary
Junio C Hamano [Sat, 26 May 2007 08:30:40 +0000 (01:30 -0700)]
Merge branch 'maint-1.5.1' into maint
* maint-1.5.1:
Fix git-svn to handle svn not reporting the md5sum of a file, and test.
More echo "$user_message" fixes.
Add tests for the last two fixes.
git-commit: use printf '%s\n' instead of echo on user-supplied strings
git-am: use printf instead of echo on user-supplied strings
Documentation: Add definition of "evil merge" to GIT Glossary
Replace the last 'dircache's by 'index'
Documentation: Clean up links in GIT Glossary
Daniel Barkalow [Fri, 25 May 2007 05:20:56 +0000 (01:20 -0400)]
Move refspec pattern matching to match_refs().
This means that send-pack and http-push will support pattern refspecs,
so builtin-push.c doesn't have to expand them, and also git push can
just turn --tags into "refs/tags/*", further simplifying
builtin-push.c
check_ref_format() gets a third "conditionally okay" result for
something that's valid as a pattern but not as a particular ref.
Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
James Y Knight [Thu, 24 May 2007 04:37:06 +0000 (00:37 -0400)]
Fix git-svn to handle svn not reporting the md5sum of a file, and test.
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Andy Parkins [Fri, 25 May 2007 10:50:08 +0000 (11:50 +0100)]
Fix mishandling of $Id$ expanded in the repository copy in convert.c
If the repository contained an expanded ident keyword (i.e. $Id:XXXX$),
then the wrong bytes were discarded, and the Id keyword was not
expanded. The fault was in convert.c:ident_to_worktree().
Previously, when a "$Id:" was found in the repository version,
ident_to_worktree() would search for the next "$" after this, and
discarded everything it found until then. That was done with the loop:
do {
ch = *cp++;
if (ch == '$')
break;
rem--;
} while (rem);
The above loop left cp pointing one character _after_ the final "$"
(because of ch = *cp++). This was different from the non-expanded case,
were cp is left pointing at the "$", and was different from the comment
which stated "discard up to but not including the closing $". This
patch fixes that by making the loop:
do {
ch = *cp;
if (ch == '$')
break;
cp++;
rem--;
} while (rem);
That is, cp is tested _then_ incremented.
This loop exits if it finds a "$" or if it runs out of bytes in the
source. After this loop, if there was no closing "$" the expansion is
skipped, and the outer loop is allowed to continue leaving this
non-keyword as it was. However, when the "$" is found, size is
corrected, before running the expansion:
size -= (cp - src);
This is wrong; size is going to be corrected anyway after the expansion,
so there is no need to do it here. This patch removes that redundant
correction.
To help find this bug, I heavily commented the routine; those comments
are included here as a bonus.
Signed-off-by: Andy Parkins <andyparkins@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Jeff King [Sat, 26 May 2007 07:33:03 +0000 (00:33 -0700)]
More echo "$user_message" fixes.
Here are fixes to more uses of 'echo "$msg"' where $msg could contain
backslashed sequence.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Junio C Hamano [Sat, 26 May 2007 07:26:20 +0000 (00:26 -0700)]
Add tests for the last two fixes.
This updates t4014 to check the two fixes for git-am and git-commit
we observed with "echo" that does backslash interpolation by default
without being asked with -e option.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Junio C Hamano [Sat, 26 May 2007 05:00:54 +0000 (22:00 -0700)]
git-commit: use printf '%s\n' instead of echo on user-supplied strings
This fixes the same issue git-am had, which was fixed by Jeff
King in the previous commit. Cleverly enough, this commit's log
message is a good test case at the same time.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Jeff King [Sat, 26 May 2007 03:42:36 +0000 (23:42 -0400)]
git-am: use printf instead of echo on user-supplied strings
Under some implementations of echo (such as that provided by
dash), backslash escapes are recognized without any other
options. This means that echo-ing user-supplied strings may
cause any backslash sequences in them to be converted. Using
printf resolves the ambiguity.
This bug can be seen when using git-am to apply a patch
whose subject contains the character sequence "\n"; the
characters are converted to a literal newline. Noticed by
Szekeres Istvan.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Nicolas Pitre [Sat, 26 May 2007 03:37:40 +0000 (23:37 -0400)]
fixes to output of git-verify-pack -v
Now that the default delta depth is 50, it is a good idea to also bump
MAX_CHAIN to 50.
While at it, make the display a bit prettier by making the MAX_CHAIN
limit inclusive, and display the number of deltas that are above that
limit at the end instead of the beginning.
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Jakub Narebski [Fri, 25 May 2007 22:37:39 +0000 (00:37 +0200)]
Documentation: Add definition of "evil merge" to GIT Glossary
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Jakub Narebski [Fri, 25 May 2007 22:37:40 +0000 (00:37 +0200)]
Replace the last 'dircache's by 'index'
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Jakub Narebski [Fri, 25 May 2007 22:37:38 +0000 (00:37 +0200)]
Documentation: Clean up links in GIT Glossary
Ensure that the same link is not repeated in single glossary entry,
and that there is no self-link i.e. link to current entry.
Add links to other definitions in git glossary.
Remove inappropriate (nonsense) links, or change link to link to
correct definition (to correct term).
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Alex Riesen [Wed, 23 May 2007 21:01:29 +0000 (23:01 +0200)]
Add a configuration option to control diffstat after merge
The diffstat can be controlled either with command-line options
(--summary|--no-summary) or with merge.diffstat. The default is
left as it was: diffstat is active by default.
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Alex Riesen [Wed, 23 May 2007 21:31:13 +0000 (23:31 +0200)]
Add another verbosity level to git-fetch
Use "-v -v" to run git-fetch-pack in verbose mode.
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Alex Riesen [Wed, 23 May 2007 21:34:27 +0000 (23:34 +0200)]
Verbose connect messages to show the IP addresses used
Also, the patch makes the error messages more verbose. Helps when
diagnosing connect problems on weird systems.
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Robin Rosenberg [Thu, 24 May 2007 15:06:55 +0000 (17:06 +0200)]
Add option to cvs update before export
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Junio C Hamano [Fri, 25 May 2007 04:35:29 +0000 (21:35 -0700)]
Merge branch 'maint'
* maint:
fix memory leak in parse_object when check_sha1_signature fails
name-rev: tolerate clock skew in committer dates
Update bash completion for git-config options
Teach bash completion about recent log long options
Teach bash completion about 'git remote update'
Update bash completion header documentation
Remove a duplicate --not option in bash completion
Teach bash completion about git-shortlog
Hide the plumbing diff-{files,index,tree} from bash completion
Update bash completion to ignore some more plumbing commands
Junio C Hamano [Fri, 25 May 2007 04:34:59 +0000 (21:34 -0700)]
Merge branch 'master' of git://repo.or.cz/git/fastimport into maint
* 'master' of git://repo.or.cz/git/fastimport:
Update bash completion for git-config options
Teach bash completion about recent log long options
Teach bash completion about 'git remote update'
Update bash completion header documentation
Remove a duplicate --not option in bash completion
Teach bash completion about git-shortlog
Hide the plumbing diff-{files,index,tree} from bash completion
Update bash completion to ignore some more plumbing commands
Dana How [Fri, 25 May 2007 02:06:42 +0000 (19:06 -0700)]
Ensure git-repack -a -d --max-pack-size=N deletes correct packs
The packfile portion of the "remove redundant" code
near the bottom of git-repack.sh is broken when
pack splitting occurs. Particularly since this is
the only place where we automatically delete packfiles,
make sure it works properly for all cases, old or new.
Signed-off-by: Dana L. How <danahow@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Linus Torvalds [Thu, 24 May 2007 18:41:39 +0000 (11:41 -0700)]
Make "git gc" pack all refs by default
I've taught myself to use "git gc" instead of doing the repack explicitly,
but it doesn't actually do what I think it should do.
We've had packed refs for a long time now, and I think it just makes sense
to pack normal branches too. So I end up having to do
git pack-refs --all --prune
in order to get a nice git repo that doesn't have any unnecessary files.
So why not just do that in "git gc"? It's not as if there really is any
downside to packing branches, even if they end up changing later. Quite
often they don't, and even if they do, so what?
Also, make the default for refs packing just be an unambiguous "do it",
rather than "do it by default only for non-bare repositories". If you want
that behaviour, you can always just add a
[gc]
packrefs = notbare
in your ~/.gitconfig file, but I don't actually see why bare would be any
different (except for the broken reason that http-fetching used to be
totally broken, and not doing it just meant that it didn't even get
fixed in a timely manner!).
So here's a trivial patch to make "git gc" do a better job. Hmm?
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Fernando J. Pereda [Thu, 24 May 2007 22:15:36 +0000 (00:15 +0200)]
Teach mailsplit about Maildir's
Signed-off-by: Fernando J. Pereda <ferdy@gentoo.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Junio C Hamano [Fri, 25 May 2007 02:01:50 +0000 (19:01 -0700)]
Merge branch 'maint-1.5.1' into maint
* maint-1.5.1:
fix memory leak in parse_object when check_sha1_signature fails
name-rev: tolerate clock skew in committer dates
Carlos Rica [Fri, 25 May 2007 01:46:22 +0000 (03:46 +0200)]
fix memory leak in parse_object when check_sha1_signature fails
When check_sha1_signature fails, program is not terminated:
it prints an error message and returns NULL, so the
buffer returned by read_sha1_file should be freed before.
Signed-off-by: Carlos Rica <jasampler@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Junio C Hamano [Thu, 24 May 2007 19:20:42 +0000 (12:20 -0700)]
name-rev: tolerate clock skew in committer dates
In git.git repository, "git-name-rev v1.3.0~158" cannot name the
rev, while adjacent revs can be named.
This was because it gives up traversal from the tips of existing
refs as soon as it sees a commit that has older commit timestamp
than what is being named. This is usually a good heuristics,
but v1.3.0~158 has a slightly older commit timestamp than
v1.3.0~157 (i.e. it's child), as these two were made in a
separate repostiory (in fact, in a different continent).
This adds a hardcoded slop value (1 day) to the cut-off
heuristics to work this kind of problem around. The current
algorithm essentially runs around from the available tips down
to ancient commits and names every single rev available that are
newer than cut-off date, so a single day slop would not add that
much overhead in repositories with long enough history where the
performance of name-rev matters.
I think the algorithm could be made a bit smarter by deepening
the graph on demand as a new commit is asked to be named (this
would require rewriting of name_rev() function not to recurse
itself but use a traversal list like revision.c traverser does),
but that would be a separate issue.
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Shawn O. Pearce [Thu, 24 May 2007 06:33:13 +0000 (02:33 -0400)]
Correct key bindings to Control-<foo>
Alberto Bertogli reported on #git that git-gui was exiting with
alt-q, while gitk on the same system was exiting with ctrl-q.
That was not what I wanted. I really wanted M1B to be bound to
the Control key on most non-Mac OS X platforms, but according to
Sam Vilain M1 on most systems means alt. Since gitk always does
control, I'm doing the same thing for all non-Mac OS X systems.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Shawn O. Pearce [Thu, 24 May 2007 06:07:45 +0000 (02:07 -0400)]
Update bash completion for git-config options
A few new configuration options grew out of the woodwork during the
1.5.2 series. Most of these are pretty easy to support a completion
of, so we do so.
I wanted to also add completion support for the <driver> part of
merge.<driver>.name but to do that we have to look at all of the
.gitattributes files and guess what the unique set of <driver>
strings would be. Since this appears to be non-trivial I'm punting
on it at this time.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>