fetch2.git
4 years agobuiltin-fetch2: sort out merge flagging in canon_ref_maps fetch2
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).

4 years agofetch-pack: fix compilation
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.

4 years agobuiltin-fetch2: fix compilation
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.

4 years agobuiltin-fetch2: add some extra comments
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.

4 years agobuiltin-fetch2: actually restore HEAD when necessary
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.

4 years agobuiltin-fetch2: respond to --tags
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.

4 years agogit-fetch2: use path_list to prevent tag being fetched twice
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).

4 years agogit-fetch2: use builtin-http-fetch to fetch refs via curl
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.

4 years agohttp-fetch: make http-fetch a builtin
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.

4 years agogit-fetch2: actually process command-line refspecs
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.

4 years agogit-fetch2: correct typo in cmd_fetch
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.

4 years agogit-fetch2: wrap knowledge about remote repo into struct remote
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.

4 years agogit-fetch2: replace read_ref with path_list_has_path
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.

4 years agogit-fetch2: tidy up the code slightly
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.

4 years agogit-fetch2: free memory in fetch_refs_via_pack
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 ...

4 years agogit-fetch2: improve canon_ref_maps when canonising the default refs list
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.

4 years agogit-fetch2: fix tag fetching to fetch tag objects
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.

4 years agogit-fetch2: set the default reflog action
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)".

4 years agogit-fetch2: start implementing canon_ref_maps function
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.

4 years agogit-fetch2: move struct ref_map and helper functions
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.

4 years agogit-fetch2: use hashcpy instead of memcpy
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).

4 years agogit-fetch2: add automatic tag following code
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.

4 years agogit-fetch2: fix typo in get_refs_via_curl
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.

4 years agogit-fetch2: rework the get_expanded_map mechanism to cache 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).

4 years agogit-fetch2: remove debug output from fetch_refs_via_pack
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.

4 years agogit-fetch2: add comment about possible memory leak
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.

4 years agogit-fetch2: update the local refs and write FETCH_HEAD
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).

4 years agogit-fetch2: use the return of read_ref to determine if orig_head is valid
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.

4 years agogit-fetch2: use sha1 utility functions
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.

4 years agofix git-fetch2 usage of fetch-pack
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.

4 years agogit-fetch2: correct function definitions
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)
    {
            ...
    }

4 years agogit-fetch2: call into fetch-pack to actually fetch the new objects
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)

4 years agofetch-pack: make fetch-pack a builtin
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.

4 years agoFix Makefile breakage when building without NO_CURL=..
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.

4 years agogit-fetch2: tidy up do_fetch
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.

4 years agogit-fetch2: clean up warnings
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.

4 years agogit-fetch2: add expand_via_curl function
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.

4 years agogit-fetch2: fix thinko in get_default_remote
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).

4 years agogit-fetch2: remove ref_maps that are not interesting
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.

4 years agogit-fetch2: get semi-complete ref_map path for pack based protocols
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 ...

4 years agogit-fetch2: start adding ability to determine ref mapping
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.

4 years agogit-fetch2: add do_fetch
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.

4 years agogit-fetch2: add get_remote_url function
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 ...

4 years agogit-fetch2: add get_default_remote
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)

4 years agogit-fetch2: parse command line arguments
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.

4 years agogit-fetch2: create new builtin command
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.

4 years agoMerge branch 'db/remote'
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.

4 years agoMerge branch 'dh/repack' (early part)
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

4 years agoMerge branch 'np/delta'
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

4 years agoMerge branch 'jc/nodelta'
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()

4 years agoMerge branch 'ar/verbose'
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

4 years agoMerge branch 'ar/run'
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

4 years agoMerge branch 'ar/mergestat'
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

4 years agoMerge branch 'rr/cvsexport'
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

4 years agoMerge branch 'maint'
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

4 years agocvsserver: Handle 'cvs login'
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>

4 years agot9400: Work around CVS' deficiencies
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>

4 years agoAllow contrib new-workdir to link into bare repositories
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>

4 years agomailsplit: fix for more than one input files
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>

4 years agocvsserver: Fix some typos in asciidoc documentation
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>

4 years agocvsserver: Note that CVS_SERVER can also be specified as method variable
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>

4 years agocvsserver: Correct inetd.conf example in asciidoc documentation
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>

4 years agouser-manual: fixed typo in example
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>

4 years agoAdd test case for $Id$ expanded in the repository
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>

4 years agoMerge branch 'maint-1.5.1' into maint
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()

4 years agogit-svn: avoid md5 calculation entirely if SVN doesn't provide one
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>

4 years agoMerge branch 'maint' of git://repo.or.cz/git-gui into maint
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

4 years agoMakefile: Remove git-fsck and git-verify-pack from PROGRAMS
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>

4 years agoFix stupid typo in lookup_tag()
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>

4 years agogit-gui: Guess our share/git-gui/lib path at runtime if possible
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>

4 years agoupdate diff-delta.c copyright
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>

4 years agoimprove delta long block matching with big files
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>

4 years agoMake the pack-refs interfaces usable from outside
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>

4 years agoMerge branch 'maint'
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

4 years agoMerge branch 'maint-1.5.1' into maint
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

4 years agoMove refspec pattern matching to match_refs().
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>

4 years agoFix git-svn to handle svn not reporting the md5sum of a file, and test.
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>

4 years agoFix mishandling of $Id$ expanded in the repository copy in convert.c
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>

4 years agoMore echo "$user_message" fixes.
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>

4 years agoAdd tests for the last two fixes.
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>

4 years agogit-commit: use printf '%s\n' instead of echo on user-supplied strings
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>

4 years agogit-am: use printf instead of echo on user-supplied strings
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>

4 years agofixes to output of git-verify-pack -v
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>

4 years agoDocumentation: Add definition of "evil merge" to GIT Glossary
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>

4 years agoReplace the last 'dircache's by 'index'
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>

4 years agoDocumentation: Clean up links in GIT Glossary
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>

4 years agoAdd a configuration option to control diffstat after merge
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>

4 years agoAdd another verbosity level to git-fetch
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>

4 years agoVerbose connect messages to show the IP addresses used
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>

4 years agoAdd option to cvs update before export
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>

4 years agoMerge branch 'maint'
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

4 years agoMerge branch 'master' of git://repo.or.cz/git/fastimport into maint
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

4 years agoEnsure git-repack -a -d --max-pack-size=N deletes correct packs
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>

4 years agoMake "git gc" pack all refs by default
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>

4 years agoTeach mailsplit about Maildir's
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>

4 years agoMerge branch 'maint-1.5.1' into maint
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

4 years agofix memory leak in parse_object when check_sha1_signature fails
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>

4 years agoname-rev: tolerate clock skew in committer dates
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>

4 years agoCorrect key bindings to Control-<foo>
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>

4 years agoUpdate bash completion for git-config options
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>