3 years agogitweb: Add beginnings of cache administration page (proof of concept)gitweb/cache-kernel-pugitweb/cache-kernel-v6
Jakub Narebski [Sun, 5 Dec 2010 23:01:10 +0000]
gitweb: Add beginnings of cache administration page (proof of concept)

Currently cache administration page ('cache' action) shows estimated
size of cache, and provides link to clearing cache.

Cache administration page is visible only on local computer; the same
is true with respect to ability to clear cache.  Those are bare
beginnings of autorization framework.

If you can use cache administration page, you will see 'admin' link at
the botom of the page to it.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Add clear() and size() methods to caching interface
Jakub Narebski [Sun, 5 Dec 2010 23:01:10 +0000]
gitweb/lib - Add clear() and size() methods to caching interface

Add ->size() method, which following Cache::Cache interface returns
estimated total size of all entries in whole cache (in the namsepace
assiciated with give cache instance).  Note that ->get_size($key)
returns size of a single entry!

Add ->clear() method, which removes all entries from the namespace
associated with given cache instance.  For safety it requires
namespace to be set to true value, which means that it cannot be
empty; therefore default namespace is changed to 'gitweb'.

The ->clear() method should be fairly safe, because it first renames
directory (which should be atomic), and only then removes it
(following code from CGI::Driver::File).

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb: Support legacy options used by kernel.org caching engine
Jakub Narebski [Sun, 5 Dec 2010 23:01:10 +0000]
gitweb: Support legacy options used by  caching engine

Try to translate between config variables used by gitweb caching
patches[1] by John 'Warthog9' Hawley (J.H.) used, among others, by
git.kernel.org, and new %cache_config options, but only if they were set
in the config file.

Note that $cache_enable is *not* translated to $caching_enabled.

Footnotes:
~~~~~~~~~~
[1] See for example "Gitweb caching v7" thread on git mailing list:
    http://thread.gmane.org/gmane.comp.version-control.git/160147

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb: Wrap die_error to use as error handler for caching engine
Jakub Narebski [Sun, 5 Dec 2010 23:01:10 +0000]
gitweb: Wrap die_error to use as error handler for caching engine

Use cache_error_handler subroutine, wrapping die_error (and
HTML-escaping error message), as 'on_error' handler for
GitwebCache::SimpleFileCache and its derivatives, and as both
'on_get_error' and 'on_set_error' handler for CHI based caching
engine.

Added single test in t9501 that checks if error in caching layer
produces "500 Internal Server Error".

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Add support for setting error handler in cache
Jakub Narebski [Sun, 5 Dec 2010 23:01:10 +0000]
gitweb/lib - Add support for setting error handler in cache

GitwebCache::SimpleFileCache and GitwebCache::FileCacheWithLocking
acquired support for 'on_error'/'error_handler' parameter, which
accepts the same values as 'on_get_error' and 'on_set_error' option in
CHI, with exception of support for "log".  The default is "die" (as it
was before), though it now uses "croak" from Carp, rather than plain
"die".

Added basic test for 'on_error' in t9503: setting it to error handler
that dies, and setting it to 'ignore'.

The way error handler coderef is invoked is slightly different from
the way CHI does it: the error handler doesn't pass key and raw error
message as subsequent parameters.

Because '$self->_handle_error($msg)' is used in place of 'die $msg',
read_file and write_fh subroutines had to be converted to methods, to
have access to $self.  Alternate solution would be to catch errors
using "eval BLOCK" in ->get() and ->set() etc., like in CHI::Driver.

Note that external subroutines that croak()/die() on error (like
'mkpath' or 'tempfile') are now wrapped in eval block (this would be
not necessary if alternate solution described above was used).

While at it refactor ensuring that directory exists (for opening file
for writing, possibly creating it) into ->ensure_path($dir) method.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb: Add startup delay to activity indicator for cache
Jakub Narebski [Sun, 5 Dec 2010 23:01:09 +0000]
gitweb: Add startup delay to activity indicator for cache

This adds support for [optional] startup delay to git_generating_data_html()
subroutine, which is used to provide "Generating..." page as activity
indicator when waiting for page to be generated if caching.  If the data
(page contents) gets generated within $generating_options{'staryp_delay'}
seconds, the "Generating..." page won't get displayed.

This feature was created in response to complaint by Petr 'Pasky' Baudis'
about "Generating..." feature.

NOTE: This startup delay allows to use git_generating_data_html() also
for process generating data, assuming that die_error(), which turns of
capturing and which output (error page) is not cache, finishes within
startup delay.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Configure running 'generating_info' when generating data
Jakub Narebski [Sun, 5 Dec 2010 23:01:09 +0000]
gitweb/lib - Configure running 'generating_info' when generating data

Add a new 'generating_info_is_safe' cache option; if true, then
process generating data (one that acquired exclusive writer's lock)
would run 'generating_info' if there is no stale data and background
cache generation is enabled.

If function generating (or printing) exits, which leads to cache entry
not being generated (for gitweb this means that there are pages which
are not cached, i.e. error pages), and 'generating_info' also exits,
this could result in bad behavior.  Therefore this new option is false
by default.

Updates t9503 test appropriately.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb: Show appropriate "Generating..." page when regenerating cache
Jakub Narebski [Sun, 5 Dec 2010 23:01:09 +0000]
gitweb: Show appropriate "Generating..." page when regenerating cache

When there exist stale/expired (but not too stale) version of
(re)generated page in cache, gitweb returns stale version (and updates
cache in background, assuming 'background_cache' is set to true value).
When there is no stale version suitable to serve the client, currently
we have to wait for the data to be generated in full before showing it.
Add to GitwebCache::FileCacheWithLocking, via 'generating_info' callback,
the ability to show user some activity indicator / progress bar, to
show that we are working on generating data.

Note that without generating data in background, process generating
data wouldn't print progress info, because 'generating_info' can exit
(and in the case of gitweb's git_generating_data_html does exit).

Gitweb itself uses "Generating..." page as activity indicator, which
redirects (via <meta http-equiv="Refresh" ...>) to refreshed version
of the page after the cache is filled (via trick of not closing page
and therefore not closing connection till data is available in cache,
checked by getting shared/readers lock on lockfile for cache entry).
The git_generating_data_html() subroutine, which is used by gitweb
to implement this feature, is highly configurable: you can choose
frequency of writing some data so that connection won't get closed,
and maximum time to wait for data in "Generating..." page (see comments
in %generating_options hash definition).

The git_generating_data_html() subroutine would return early (not showing
HTML-base progress indicator) if action does not return HTML output, or
if web browser / user agent is a robot / web crawler (or gitweb is run as
standalone script).  In such cases HTML "Generating..." page does not make
much sense.

For this purpose new subrotuines action_outputs_html($action) (which uses
%actions_info introduced in earlier commit) and browser_is_robot() (which
uses HTTP::BrowserDetect if possible, and fall backs on simple check of
User-Agent string) were added.

WARNING: If 'generating_info' subroutine always exits, like
git_generating_data_html() currently does, then there would be problems
with error pages, which are not cached... unless the process generating
data does not use 'generating_info', see the next commit.  The initial
delay introduced in 2nd next commit migitates this issue somewhat.

Alternate solution would be to print output when generating data
('tee'-ing it).

Add test for simple (not exiting) 'generating_info' subroutine, for both
case with background generation disabled and enabled to t9503.

Inspired-by-code-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb: Introduce %actions_info, gathering information about actions
Jakub Narebski [Sun, 5 Dec 2010 23:01:09 +0000]
gitweb: Introduce %actions_info, gathering information about actions

Currently it only contains information about output format, and is not
used anywhere.  It will be used to check whether current action
produces HTML output, and therefore is displaying HTML-based progress
info about (re)generating cache makes sense.

It can contain information about allowed extra options, whether to
display link to feed (Atom or RSS), etc. in easier and faster way than
listing all matching or all non-matching actions at appropriate place.

Currently not used; will be used in next commit, to check if action
produces HTML output and therefore we can use HTML-specific progress
indicator.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Regenerate (refresh) cache in background
Jakub Narebski [Sun, 5 Dec 2010 23:01:09 +0000]
gitweb/lib - Regenerate (refresh) cache in background

This commit removes asymmetry in serving stale data (if stale data exists)
when regenerating cache in GitwebCache::FileCacheWithLocking.  The process
that acquired exclusive (writers) lock, and is therefore selected to
be the one that (re)generates data to fill the cache, can now generate
data in background, while serving stale data.

Those background processes are daemonized, i.e. detached from the main
process (the one returning data or stale data).  Otherwise there might be a
problem when gitweb is running as (part of) long-lived process, for example
from mod_perl or from FastCGI: it would leave unreaped children as zombies
(entries in process table).  We don't want to wait for background process,
and we can't set $SIG{CHLD} to 'IGNORE' in gitweb to automatically reap
child processes, because this interferes with using
  open my $fd, '-|', git_cmd(), 'param', ...
    or die_error(...)
  # read from <$fd>
  close $fd
    or die_error(...)
In the above code "close" for magic "-|" open calls waitpid...  and we
would would die with "No child processes".  Removing 'or die' would
possibly remove ability to react to other errors.

This feature can be enabled or disabled on demand via 'background_cache'
cache parameter.  It is turned on by default.

The t9503 test got updated to test both case with background generation
enabled and case with background generation disabled.

Inspired-by-code-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Serve stale data when waiting for filling cache
Jakub Narebski [Sun, 5 Dec 2010 23:01:08 +0000]
gitweb/lib - Serve stale data when waiting for filling cache

When process fails to acquire exclusive (writers) lock, then instead
of waiting for the other process to (re)generate and fill cache, serve
stale (expired) data from cache.  This is of course possible only if
there is some stale data in cache for given key.

This feature of GitwebCache::FileCacheWithLocking is used only for
->update($key, $code) and ->update_fh($key, $code_fh) methods.  It is
controlled by 'max_lifetime' cache parameter; you can set it to -1 to
always serve stale data if it exists, and you can set it to 0 (or any
value smaller than 'expires_min') to turn this feature off.

This feature, as it is implemented currently, makes ->update() method a
bit asymmetric with respect to process that acquired writers lock and
those processes that didn't, which can be seen in the new test in t9503.
The process that is to regenerate (refresh) data in cache must wait for
the data to be generated in full before showing anything to client, while
the other processes can show stale (expired) data immediately.  In order
to remove or reduce this asymmetry gitweb would need to employ one of
two alternate solutions.  Either data should be (re)generated in background,
so that process that acquired writers lock would generate data in
background while serving stale data, or alternatively the process that
generates data should pass output to original STDOUT while capturing it
("tee" output).

Note that process that got stale data serves it immediately, therefore
it wouldn't be available to regenerate data if process regenerating
data died; see commented-out TODO test in t9503.  Otherwise it would
have to wait to check if data got regenerated, which would negate the
idea of serving stale data for a fast return.

When developing this feature, ->is_valid() method in base class
GitwebCache::SimpleFileCache acquired additional extra optional
parameter, where one can pass expire time instead of using whole-cache
global (adaptive) expire time.

Inspired-by-code-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - No need for File::Temp when locking
Jakub Narebski [Sun, 5 Dec 2010 23:01:08 +0000]
gitweb/lib - No need for File::Temp when locking

When using locking to ensure that only one process is generating data
and updating cache, there is no need to use File::Temp for temporary
file.  This should improve performance.

The _tempfile_to_path subroutine got promoted to _tempfile_to_path
method, because we want to choose correct one dynamically, based on
the type of object (polymorphism).

Idea-inspired-by-code-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Use locking to avoid 'cache miss stampede' problem
Jakub Narebski [Sun, 5 Dec 2010 23:01:03 +0000]
gitweb/lib - Use locking to avoid 'cache miss stampede' problem

Create GitwebCache::FileCacheWithLocking module (class), derived from
GitwebCache::SimpleFileCache, where the ->compute($key, $code) method
use locking (via flock) to ensure that only one process would generate
data to update/fill-in cache; the rest would wait for the cache to
be (re)generated and would read data from cache.  If process that was
to (re)generate data dies or exits, one of the readers would take its
role.  This also means that if some data is not cached (like e.g. error
pages in gitweb), then it would work correctly even in rare case of
simultaneous access to the same non-cached entry.

Currently this feature can not be disabled via %cache_options,
although you can set $cache to 'GitwebCache::SimpleFileCache' instead.
Future new features (like: serving stale data while cache is being
regenerated, (re)generating cache in background, activity indicator)
all depend on locking.

A test in t9503 shows that in the case where there are two clients
trying to simultaneously access non-existent or stale cache entry,
(and generating data takes (artifically) a bit of time), if they are
using ->compute method the data is (re)generated once, as opposed to
situation when those clients are just using ->get/->set methods.

The situation where subroutine used to generate data dies is also
tested in t9503.

Note that there is very slight inefficiency, in that filename for
lockfile depends on the filename for cache entry (it just adds '.lock'
suffix), but is recalculated from $key for both paths.

Inspired-by-code-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - capture output directly to cache entry file
Jakub Narebski [Sun, 5 Dec 2010 20:48:57 +0000]
gitweb/lib - capture output directly to cache entry file

This commit makes it possible to capture output redirecting STDOUT to
cache entry file; this way we don't need to store whole output in
memory in order to cache it.

The ->capture() method in GitwebCache::Capture::Simple is extended so
it signature is now ->capture($code[, $to]).  This means that it
accepts optional $to parameter, which specifies either filehandle open
for writing, or a file name, which would be used to capture output
instead of in-memory file.  The ->capture_start() and ->capture_stop()
methods that are used by ->capture() also got updated.

GitwebCache::SimpleFileCache acquired new ->compute_fh($key, $code_fh)
method.  Instead of passing and returning data like ->compute(), it
passes and returns filehandles and filenames.  While $code parameter
in ->compute($key, $code) call is expected to generate and return data
to be cached, the $code_fh parameter in ->compute_fh($key, $code_fh)
call is expected to print generated data to filehandle provided as its
parameter.  Instead of returning data (either from cache or generated)
like ->compute(), the new ->compute_fh() method returns filehandle and
filename to read data from.

The cache_output subroutine in GitwebCache::CacheOutput now uses
->compute_fh method if cache supports it.  The contents of file that
is returned by ->compute_fh is dumped to STDOUT using File::Copy::copy.

Note that ->compute_fh interface is non-standard, and is not supported
by any caching module known to author.  Closest to it is ->handle($key)
method in the Cache[1] interface (proxied to ->entry($key)->handle()).

[1]: http://p3rl.org/Cache

Added tests for capturing to file in t9503, and of ->compute_fh method
in t9504.

Inspired-by-idea-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Use CHI compatibile (compute method) caching interface
Jakub Narebski [Sun, 5 Dec 2010 20:48:56 +0000]
gitweb/lib - Use CHI compatibile (compute method) caching interface

If $cache provides CHI compatible ->compute($key, $code) method, use it
instead of Cache::Cache compatible ->get($key) and ->set($key, $data).
In the future other compatibile but differently named methods, like
Cache::FastMmap's ->get_and_set($key, $code) method, could also be
supported; though CHI which has ->compute() includes CHI::Driver::FastMmap
wrapper.

GitwebCache::SimpleFileCache provides 'compute' method, which currently
simply use 'get' and 'set' methods in proscribed manner.  Nevertheless
'compute' method can be more flexible in choosing when to refresh cache,
and which process is to refresh/(re)generate cache entry.  This method
would use (advisory) locking to prevent 'cache miss stampede' (aka
'stampeding herd') problem in the next commit.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Adaptive cache expiration time
Jakub Narebski [Sun, 5 Dec 2010 20:48:54 +0000]
gitweb/lib - Adaptive cache expiration time

Add to GitwebCache::SimpleFileCache support for adaptive lifetime
(cache expiration) control.  Cache lifetime can be increased or
decreased by any factor, e.g. load average, through the definition
of the 'check_load' callback.

Note that using ->set_expires_in, or unsetting 'check_load' via
->set_check_load(undef) turns off adaptive caching.

Make gitweb automatically adjust cache lifetime by load, using
get_loadavg() function.  Define and describe default parameters for
dynamic (adaptive) cache expiration time control.

There are some very basic tests of dynamic expiration time in t9503,
namely checking if dynamic expire time is within given upper and lower
bounds.

Inspired-by-code-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb: Add optional output caching
Jakub Narebski [Sun, 5 Dec 2010 20:48:53 +0000]
gitweb: Add optional output caching

This commit actually adds output caching to gitweb, as we have now
minimal features required for it in GitwebCache::SimpleFileCache
(a 'dumb' but fast file-based cache engine).  To enable cache you need
(at least) set $caching_enabled to true in gitweb config, and copy
required modules alongside generated gitweb.cgi - this is described
in more detail in the new "Gitweb caching" section in gitweb/README.
"make install-gitweb" would install all modules alongside gitweb
itself.

Caching in theory can be done using any Perl module that implements
Cache::Cache compatibile get/set (method) interface.  The default is
to use GitwebCache::SimpleFileCache.  Capturing and caching output
is done via cache_output subroutine from GitwebCache::CacheOutput.

The cache_output subroutine in GitwebCache::CacheOutput currently uses
GitwebCache::Capture::Simple compatibile capturing engine passed as
one of parameters to cache_output subroutine.  The default is to use
GitwebCache::Capture::Simple package.

Capturing and caching is designed in such way that there is no
behaviour change if $caching_enabled is false.  If caching is not
enabled, then capturing is also turned off.

Enabling caching causes the following additional changes to gitweb
output:
* Disables content-type negotiation (choosing between 'text/html'
  mimetype and 'application/xhtml+xml') when caching, as there is no
  content-type negotiation done when retrieving page from cache.
  Use lowest common denominator of 'text/html' mimetype which can
  be used by all browsers.  This may change in the future.
* Disable optional timing info (how much time it took to generate the
  original page, and how many git commands it took), and in its place show
  unconditionally when page was originally generated (in GMT / UTC
  timezone).
* Disable 'blame_incremental' view, as it doesn't make sense without
  printing data as soon as it is generated (which would require tee-ing
  when capturing output for caching)... and it doesn't work currently
  anyway.  Alternate solution would be to run 'blame_incremental' view
  with caching disabled.

Add basic tests of caching support to t9500-gitweb-standalone-no-errors
test: set $caching_enabled to true and check for errors for first time
run (generating cache) and second time run (retrieving from cache) for a
single view - summary view for a project.

Check in the t9501-gitweb-standalone-http-status test that gitweb at
least correctly handles "404 Not Found" error pages also in the case
when gitweb caching is enabled.

Check in the t9502-gitweb-standalone-parse-output test that gitweb
produces the same output with and without caching, for first and
second run, with binary or text output.

All those tests make use of new gitweb_enable_caching subroutine added
to gitweb-lib.sh

Inspired-by-code-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Cache captured output (using get/set)
Jakub Narebski [Sun, 5 Dec 2010 20:48:51 +0000]
gitweb/lib - Cache captured output (using get/set)

Add GitwebCache::CacheOutput package, which contains cache_output
subroutine.  The cache_output gets data from cache and prints it, or
captures output of provided subroutine (code reference), saves it to
cache and prints it.  It currently uses Cache::Cache compatibile (get,
set) interface to cache.  The capture_stop currently simply runs
$capture->capture_stop().

Capturing output is done using GitwebCache::Capture::Simple compatibile
capture (->new(), ->capture($code)) passed as one of parameters; the
default solution is to use GitwebCache::Capture::Simple.

Gitweb would use cache_output to get page from cache, or to generate
page and save it to cache.  The capture_stop would be used in die_error
subroutine, because error pages would not be cached.

It is assumed that data is saved to cache _converted_, and should
therefore be read from cache and printed to STDOUT in ':raw' (binary)
mode.

Add t9505/test_cache_output.pl test, run as external test in
t9505-gitweb-cache.  It checks that cache_output behaves correctly,
namely that it saves and restores action output in cache, and that it
prints generated output or cached output, depending on whether there
exist data in cache.  This test requires Capture::Tiny to be installed
(because GitwebCache::Capture::Simple dosn't support recursive
capturing).

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Simple output capture by redirecting STDOUT
Jakub Narebski [Sun, 5 Dec 2010 20:48:50 +0000]
gitweb/lib - Simple output capture by redirecting STDOUT

Add GitwebCache::Capture::Simple package, which captures output by
redirecting STDOUT to in-memory file (saving what is printed to
scalar), earlier saving original STDOUT to restore it when finished
capturing.

GitwebCache::Capture::Simple preserves PerlIO layers, both those set
before started capturing output, and those set during capture.  The
exceptions is the 'scalar' layer, which needs additional parameter,
and which for proper handling needs non-core module PerlIO::Util.

No care was taken to handle the following special cases (prior to
starting capture): closed STDOUT, STDOUT reopened to scalar reference,
tied STDOUT.  You shouldn't modify STDOUT during capture.

Includes separate tests for capturing output in
t9504/test_capture_interface.pl which is run as external test from
t9504-gitweb-capture-interface.sh.  It tests capturing of utf8 data
printed in :utf8 mode, and of binary data (containing invalid utf8) in
:raw mode.

Note that nested capturing doesn't work (and probably couldn't be made
to work when capturing to in-memory file), but this feature wouldn't
be needed for capturing gitweb output (to cache it).

This patch was based on "gitweb: add output buffering and associated
functions" patch by John 'Warthog9' Hawley (J.H.) in "Gitweb caching v7"
series, and on code of Capture::Tiny by David Golden (Apache License 2.0).

Based-on-work-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Regenerate entry if the cache file has size of 0
Jakub Narebski [Sun, 5 Dec 2010 20:48:50 +0000]
gitweb/lib - Regenerate entry if the cache file has size of 0

If the file representing cache entry has size 0 (in bytes), the cache
entry is considered invalid, regardless of its freshness, even if cache
expiration is turned off.

[jh: This is a quick, and thankfully easy, check to regenerate the
cache if the resulting file is of size 0.  This *SHOULDN'T* happen,
but it is possible that it could and thus adding the check.]

Based-on-commit-by: John 'Warthog9' Hawley <warthog9@eaglescrag.net>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Stat-based cache expiration
Jakub Narebski [Sun, 5 Dec 2010 20:48:49 +0000]
gitweb/lib - Stat-based cache expiration

Add stat-based cache expiration to file-based GitwebCache::SimpleFileCache.
Contrary to the way other caching interfaces such as Cache::Cache and CHI
do it, the time when cache element expires in is _global_ value associated
with cache instance, and is not local property of cache entry.  (Currently
cache entry does not store any metadata associated with entry... which
means that there is no need for serialization / marshalling / freezing and
thawing.)  Default expire time is -1, which means never expire.

To check if cache entry is expired, GitwebCache::SimpleFileCache compares
difference between mtime (last modify time) of a cache file and current time
with (global) time to expire.  It is done using CHI-compatible is_valid()
method.

Includes some tests checking that expiring works correctly (on the level of
API) in t9503.

Inspired-by-code-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb/lib - Very simple file based cache
Jakub Narebski [Sun, 5 Dec 2010 20:48:47 +0000]
gitweb/lib - Very simple file based cache

This is first step towards implementing file based output (response)
caching layer that is used on such large sites as kernel.org.

This patch introduces GitwebCaching::SimpleFileCache package, which
follows Cache::Cache / CHI interface, although do not implement it
fully.  The intent of following established convention for cache
interface is to be able to replace our simple file based cache,
e.g. by the one using memcached.

The data is stored in the cache as-is, without adding metadata (like
expiration date), and without serialization (which means that one can
store only scalar data).  At this point there is no support for
expiring cache entries.

The code of GitwebCaching::SimpleFileCache package in gitweb/lib
was heavily based on file-based cache in Cache::Cache package, i.e.
on Cache::FileCache, Cache::FileBackend and Cache::BaseCache, and on
file-based cache in CHI, i.e. on CHI::Driver::File and CHI::Driver
(including implementing atomic write, something that original patch
lacks).  It tries to follow more modern CHI architecture, but without
requiring Moose.  It is much simplified compared to both interfaces
and their file-based drivers.

This patch does not yet enable output caching in gitweb (it doesn't
have all required features yet); on the other hand it includes tests
of cache Perl API in t/t9503-gitweb-caching-interface.sh.

Inspired-by-code-by: John 'Warthog9' Hawley <warthog9@kernel.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agogitweb: Prepare for splitting gitweb
Jakub Narebski [Sun, 5 Dec 2010 20:48:44 +0000]
gitweb: Prepare for splitting gitweb

Prepare gitweb for having been split into modules that are to be
installed alongside gitweb in 'lib/' subdirectory, by adding

  use lib __DIR__.'/lib';

to gitweb.perl (to main gitweb script), and preparing for putting
modules (relative path) in $(GITWEB_MODULES) in gitweb/Makefile.

This preparatory work allows to add new module to gitweb by simply
adding

  GITWEB_MODULES += <module>

to gitweb/Makefile (assuming that the module is in 'gitweb/lib/'
directory).

While at it pass GITWEBLIBDIR in addition to GITWEB_TEST_INSTALLED to
allow testing installed version of gitweb and installed version of
modules (for future tests which would check individual (sub)modules).

Using __DIR__ from Dir::Self module (not in core, that's why currently
gitweb includes excerpt of code from Dir::Self defining __DIR__) was
chosen over using FindBin-based solution (in core since perl 5.00307,
while gitweb itself requires at least perl 5.8.0) because FindBin uses
BEGIN block, which is a problem under mod_perl and other persistent
Perl environments (thought there are workarounds).

At Pavan Kumar Sankara suggestion gitweb/Makefile uses

  install [OPTION]... SOURCE... DIRECTORY

format (2nd format) with single SOURCE rather than

  install [OPTION]... SOURCE DEST

format (1st format) because of security reasons (race conditions).
Modern GNU install has `-T' / `--no-target-directory' option, but we
cannot rely that the $(INSTALL) we are using supports this option.

The install-modules target in gitweb/Makefile uses shell 'for' loop,
instead of make's $(foreach) function, to avoid possible problem with
generating a command line that exceeded the maximum argument list
length.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agot/test-lib.sh: Export also GIT_BUILD_DIR in test_external
Jakub Narebski [Sun, 5 Dec 2010 20:48:43 +0000]
t/test-lib.sh: Export also GIT_BUILD_DIR in test_external

This way we can use it in test scripts written in other languages
(e.g. in Perl), and not rely on "$TEST_DIRECTORY/.."

Signed-off-by: Jakub Narebski <jnareb@gmail.com>

3 years agoMerge branch 'jn/ignore-doc'
Junio C Hamano [Sat, 4 Dec 2010 00:13:06 +0000]
Merge branch 'jn/ignore-doc'

* jn/ignore-doc:
  Documentation: point to related commands from gitignore
  Documentation: split gitignore page into sections

3 years agoMerge branch 'kb/maint-status-cquote'
Junio C Hamano [Sat, 4 Dec 2010 00:13:06 +0000]
Merge branch 'kb/maint-status-cquote'

* kb/maint-status-cquote:
  status: Quote paths with spaces in short format

3 years agoMerge branch 'jn/thinner-wrapper'
Junio C Hamano [Sat, 4 Dec 2010 00:13:06 +0000]
Merge branch 'jn/thinner-wrapper'

* jn/thinner-wrapper:
  Remove pack file handling dependency from wrapper.o
  pack-objects: mark file-local variable static
  wrapper: give zlib wrappers their own translation unit
  strbuf: move strbuf_branchname to sha1_name.c
  path helpers: move git_mkstemp* to wrapper.c
  wrapper: move odb_* to environment.c
  wrapper: move xmmap() to sha1_file.c

3 years agoMerge branch 'pn/commit-autosquash'
Junio C Hamano [Sat, 4 Dec 2010 00:13:06 +0000]
Merge branch 'pn/commit-autosquash'

* pn/commit-autosquash:
  add tests of commit --squash
  commit: --squash option for use with rebase --autosquash
  add tests of commit --fixup
  commit: --fixup option for use with rebase --autosquash
  pretty.c: teach format_commit_message() to reencode the output
  commit: helper methods to reduce redundant blocks of code

Conflicts:
Documentation/git-commit.txt
t/t3415-rebase-autosquash.sh

3 years agoMerge branch 'sn/diff-doc'
Junio C Hamano [Sat, 4 Dec 2010 00:10:36 +0000]
Merge branch 'sn/diff-doc'

* sn/diff-doc:
  docs: clarify git diff modes of operation
  diff,difftool: Don't use the {0,2} notation in usage strings
  CodingGuidelines: Add a section on writing documentation

3 years agoMerge branch 'sp/emfile'
Junio C Hamano [Sat, 4 Dec 2010 00:10:35 +0000]
Merge branch 'sp/emfile'

* sp/emfile:
  Work around EMFILE when there are too many pack files
  Use git_open_noatime when accessing pack data

3 years agoMerge branch 'jc/abbrev-guard'
Junio C Hamano [Sat, 4 Dec 2010 00:10:35 +0000]
Merge branch 'jc/abbrev-guard'

* jc/abbrev-guard:
  core.abbrevguard: Ensure short object names stay unique a bit longer

3 years agoMerge branch 'jj/icase-directory'
Junio C Hamano [Sat, 4 Dec 2010 00:10:34 +0000]
Merge branch 'jj/icase-directory'

* jj/icase-directory:
  Support case folding in git fast-import when core.ignorecase=true
  Support case folding for git add when core.ignorecase=true
  Add case insensitivity support when using git ls-files
  Add case insensitivity support for directories when using git status
  Case insensitivity support for .gitignore via core.ignorecase
  Add string comparison functions that respect the ignore_case variable.
  Makefile & configure: add a NO_FNMATCH_CASEFOLD flag
  Makefile & configure: add a NO_FNMATCH flag

Conflicts:
Makefile
config.mak.in
configure.ac
fast-import.c

3 years agoMerge branch 'maint' to sync with Git 1.7.3.3
Junio C Hamano [Fri, 3 Dec 2010 23:23:50 +0000]
Merge branch 'maint' to sync with Git 1.7.3.3

* maint:
  Git 1.7.3.3
  CodingGuidelines: mention whitespace preferences for shell scripts
  Documentation: do not misinterpret pull refspec as bold text

Conflicts:
Documentation/git-pull.txt
RelNotes

3 years agoGit 1.7.3.3v1.7.3.3
Junio C Hamano [Fri, 3 Dec 2010 23:18:06 +0000]
Git 1.7.3.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agoCodingGuidelines: mention whitespace preferences for shell scripts
Giuseppe Bilotta [Fri, 3 Dec 2010 16:47:35 +0000]
CodingGuidelines: mention whitespace preferences for shell scripts

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agoDocumentation: do not misinterpret pull refspec as bold text
Jonathan Nieder [Fri, 3 Dec 2010 20:04:17 +0000]
Documentation: do not misinterpret pull refspec as bold text

Use the {asterisk} entity to avoid mistreating the asterisks
in "(e.g., refs/heads/*:refs/remotes/origin/*)" as delimiters
for bold text.

From a quick search with 'git grep -e "\*.*\*"', this seems to
be the last example of this particular formatting problem.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agoUpdate draft release notes to 1.7.4
Junio C Hamano [Thu, 2 Dec 2010 22:33:26 +0000]
Update draft release notes to 1.7.4

Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agoMerge branch 'maint'
Junio C Hamano [Thu, 2 Dec 2010 22:32:52 +0000]
Merge branch 'maint'

* maint:
  Git 1.7.0.8
  Documentation: Fix mark-up of lines with more than one tilde

Conflicts:
GIT-VERSION-GEN

3 years agoPrepare for 1.7.3.3
Junio C Hamano [Thu, 2 Dec 2010 20:24:42 +0000]
Prepare for 1.7.3.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agoGit 1.7.2.4v1.7.2.4
Junio C Hamano [Thu, 2 Dec 2010 22:28:01 +0000]
Git 1.7.2.4

Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agoGit 1.7.1.3v1.7.1.3
Junio C Hamano [Thu, 2 Dec 2010 20:18:49 +0000]
Git 1.7.1.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agoGit 1.7.0.8v1.7.0.8
Junio C Hamano [Thu, 2 Dec 2010 20:06:06 +0000]
Git 1.7.0.8

Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agoDocumentation: Fix mark-up of lines with more than one tilde
Junio C Hamano [Thu, 2 Dec 2010 19:23:50 +0000]
Documentation: Fix mark-up of lines with more than one tilde

The manual pages of cherry-pick and revert had examples with two revisions
on the same line in the examples section, that looked like this:

    git cherry-pick master~4 master~2::

Unfortunately, this is taken as a mark-up to make the part between two
tildes, "4 master", subscript.  Use {tilde} to make it explicit that we
do want ~ characters in these places (backslash does not help).

Reported-by: Sylvain Rabot <sylvain.rabot@f-secure.com>
Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agoMerge branch 'cb/maint-orphan-merge-noclobber' into maint
Junio C Hamano [Thu, 2 Dec 2010 19:27:13 +0000]
Merge branch 'cb/maint-orphan-merge-noclobber' into maint

* cb/maint-orphan-merge-noclobber:
  do not overwrite untracked during merge from unborn branch

3 years agoMerge branch 'jk/add-e-doc' into maint
Junio C Hamano [Thu, 2 Dec 2010 19:27:08 +0000]
Merge branch 'jk/add-e-doc' into maint

* jk/add-e-doc:
  docs: give more hints about how "add -e" works
  docs: give more hints about how "add -e" works

3 years agoMerge branch 'bg/maint-gitweb-test-lib' into maint
Junio C Hamano [Thu, 2 Dec 2010 19:26:49 +0000]
Merge branch 'bg/maint-gitweb-test-lib' into maint

* bg/maint-gitweb-test-lib:
  t/gitweb-lib: Don't pass constant to decode_utf8

3 years agoMerge branch 'tr/maint-merge-file-subdir' into maint
Junio C Hamano [Thu, 2 Dec 2010 19:26:40 +0000]
Merge branch 'tr/maint-merge-file-subdir' into maint

* tr/maint-merge-file-subdir:
  merge-file: correctly find files when called in subdir
  prefix_filename(): safely handle the case where pfx_len=0

3 years agoMerge branch 'ks/no-textconv-symlink' into maint
Junio C Hamano [Thu, 2 Dec 2010 19:26:24 +0000]
Merge branch 'ks/no-textconv-symlink' into maint

* ks/no-textconv-symlink:
  blame,cat-file --textconv: Don't assume mode is ``S_IFREF | 0664''
  blame,cat-file: Demonstrate --textconv is wrongly running converter on symlinks
  blame,cat-file: Prepare --textconv tests for correctly-failing conversion program

3 years agoMerge branch 'bc/fortran-userdiff' into maint
Junio C Hamano [Thu, 2 Dec 2010 19:25:36 +0000]
Merge branch 'bc/fortran-userdiff' into maint

* bc/fortran-userdiff:
  userdiff.c: add builtin fortran regex patterns

3 years agoMerge branch 'maint'
Junio C Hamano [Thu, 2 Dec 2010 00:41:13 +0000]
Merge branch 'maint'

* maint:
  add: introduce add.ignoreerrors synonym for add.ignore-errors
  bash: Match lightweight tags in prompt
  git-commit.txt: (synopsis): move -i and -o before "--"

3 years agoMerge branch 'maint-1.7.2' into maint
Junio C Hamano [Thu, 2 Dec 2010 00:40:26 +0000]
Merge branch 'maint-1.7.2' into maint

* maint-1.7.2:
  add: introduce add.ignoreerrors synonym for add.ignore-errors
  bash: Match lightweight tags in prompt
  git-commit.txt: (synopsis): move -i and -o before "--"

3 years agoMerge branch 'maint-1.7.1' into maint-1.7.2
Junio C Hamano [Thu, 2 Dec 2010 00:40:20 +0000]
Merge branch 'maint-1.7.1' into maint-1.7.2

* maint-1.7.1:
  add: introduce add.ignoreerrors synonym for add.ignore-errors

3 years agoMerge branch 'maint-1.7.0' into maint-1.7.1
Junio C Hamano [Thu, 2 Dec 2010 00:37:34 +0000]
Merge branch 'maint-1.7.0' into maint-1.7.1

* maint-1.7.0:
  add: introduce add.ignoreerrors synonym for add.ignore-errors

3 years agoadd: introduce add.ignoreerrors synonym for add.ignore-errors
Jonathan Nieder [Wed, 1 Dec 2010 18:36:15 +0000]
add: introduce add.ignoreerrors synonym for add.ignore-errors

The "[add] ignore-errors" tweakable introduced by v1.5.6-rc0~30^2 (Add
a config option to ignore errors for git-add, 2008-05-12) does not
follow the usual convention for naming values in the git configuration
file.

What convention?  Glad you asked.

The section name indicates the affected subsystem.

The subsection name, if any, indicates which of
an unbound set of things to set the value for.

The variable name describes the effect of tweaking
this knob.

The section and variable names can be broken into
words using bumpyCaps in documentation as a hint to
the reader.  These word breaks are not significant
at the level of code, since the section and variable
names are not case sensitive.

The name "add.ignore-errors" includes a dash, meaning a naive
configuration file like

[add]
ignoreErrors

does not have any effect.  Avoid such confusion by renaming to the
more consistent add.ignoreErrors, but keep the old version for
backwards compatibility.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agocommit.c: Remove backward goto in read_craft_line()
Ralf Thielow [Wed, 1 Dec 2010 19:15:59 +0000]
commit.c: Remove backward goto in read_craft_line()

Bad graft data is noticed in several places in read_graft_line(), and in
each case we go back to the first site of detection.  It in general is a
better style to have an exception handling out of line from the main
codepath and make error codepath jump forward.

Signed-off-by: Ralf Thielow <ralf.thielow@googlemail.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agobash: Match lightweight tags in prompt
knittl [Wed, 1 Dec 2010 13:17:00 +0000]
bash: Match lightweight tags in prompt

The bash prompt would display a commit's object name when having checked
out a lightweight tag.  Provide `--tags` to `git describe` in the completion
script, so it will display lightweight tag names, as it already does for
annotated tags.

Signed-off-by: Daniel Knittl-Frank <knittl89+git@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agogit-commit.txt: (synopsis): move -i and -o before "--"
Jari Aalto [Wed, 1 Dec 2010 14:51:25 +0000]
git-commit.txt: (synopsis): move -i and -o before "--"

All options, including -i and -o, must come before "--" which is the
end of options marker.

Reported-by: Joey Hess <joey@kitenet.net>
Signed-off-by: Jari Aalto <jari.aalto@cante.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

3 years agoMerge branch 'cb/leading-path-removal'
Junio C Hamano [Tue, 30 Nov 2010 01:52:36 +0000]
Merge branch 'cb/leading-path-removal'

* cb/leading-path-removal:
  use persistent memory for rejected paths
  do not overwrite files in leading path
  lstat_cache: optionally return match_len
  add function check_ok_to_remove()
  t7607: add leading-path tests
  t7607: use test-lib functions and check MERGE_HEAD

Conflicts:
t/t7607-merge-overwrite.sh

3 years agoMerge branch 'en/merge-recursive'
Junio C Hamano [Tue, 30 Nov 2010 01:52:35 +0000]
Merge branch 'en/merge-recursive'

* en/merge-recursive: (41 commits)
  t6022: Use -eq not = to test output of wc -l
  merge-recursive:make_room_for_directories - work around dumb compilers
  merge-recursive: Remove redundant path clearing for D/F conflicts
  merge-recursive: Make room for directories in D/F conflicts
  handle_delete_modify(): Check whether D/F conflicts are still present
  merge_content(): Check whether D/F conflicts are still present
  conflict_rename_rename_1to2(): Fix checks for presence of D/F conflicts
  conflict_rename_delete(): Check whether D/F conflicts are still present
  merge-recursive: Delay modify/delete conflicts if D/F conflict present
  merge-recursive: Delay content merging for renames
  merge-recursive: Delay handling of rename/delete conflicts
  merge-recursive: Move handling of double rename of one file to other file
  merge-recursive: Move handling of double rename of one file to two
  merge-recursive: Avoid doubly merging rename/add conflict contents
  merge-recursive: Update merge_content() call signature
  merge-recursive: Update conflict_rename_rename_1to2() call signature
  merge-recursive: Structure process_df_entry() to handle more cases
  merge-recursive: Have process_entry() skip D/F or rename entries
  merge-recursive: New function to assist resolving renames in-core only
  merge-recursive: New data structures for deferring of D/F conflicts
  ...

Conflicts:
t/t6020-merge-df.sh
t/t6036-recursive-corner-cases.sh

3 years agoMerge branch 'jl/clone-recurse-sm-synonym'
Junio C Hamano [Tue, 30 Nov 2010 01:52:34 +0000]
Merge branch 'jl/clone-recurse-sm-synonym'

* jl/clone-recurse-sm-synonym:
  clone: Add the --recurse-submodules option as alias for --recursive

3 years agoMerge branch 'jn/cherry-pick-refresh-index'
Junio C Hamano [Tue, 30 Nov 2010 01:52:34 +0000]
Merge branch 'jn/cherry-pick-refresh-index'

* jn/cherry-pick-refresh-index:
  cherry-pick/revert: transparently refresh index

3 years agoMerge branch 'jc/emfile'
Junio C Hamano [Tue, 30 Nov 2010 01:52:34 +0000]
Merge branch 'jc/emfile'

* jc/emfile:
  A loose object is not corrupt if it cannot be read due to EMFILE
  read_sha1_file(): report correct name of packfile with a corrupt object

3 years agoMerge branch 'md/interix'
Junio C Hamano [Tue, 30 Nov 2010 01:52:34 +0000]
Merge branch 'md/interix'

* md/interix:
  Interix: add configure checks
  add support for the SUA layer (interix; windows)

Conflicts:
git-compat-util.h

3 years agoMerge branch 'jl/add-p-reverse-message'
Junio C Hamano [Tue, 30 Nov 2010 01:52:34 +0000]
Merge branch 'jl/add-p-reverse-message'

* jl/add-p-reverse-message:
  Correct help blurb in checkout -p and friends

3 years agoMerge branch 'np/pack-broken-boundary'
Junio C Hamano [Tue, 30 Nov 2010 01:52:33 +0000]
Merge branch 'np/pack-broken-boundary'

* np/pack-broken-boundary:
  make pack-objects a bit more resilient to repo corruption

3 years agoMerge branch 'np/diff-in-corrupt-repository'
Junio C Hamano [Tue, 30 Nov 2010 01:52:33 +0000]
Merge branch 'np/diff-in-corrupt-repository'

* np/diff-in-corrupt-repository:
  diff: don't presume empty file when corresponding object is missing

3 years agoMerge branch 'fc/apply-p2-get-header-name'
Junio C Hamano [Tue, 30 Nov 2010 01:52:33 +0000]
Merge branch 'fc/apply-p2-get-header-name'

* fc/apply-p2-get-header-name:
  test: git-apply -p2 rename/chmod only
  Fix git-apply with -p greater than 1

3 years agoMerge branch 'jn/fast-import-fix'
Junio C Hamano [Tue, 30 Nov 2010 01:52:32 +0000]
Merge branch 'jn/fast-import-fix'

* jn/fast-import-fix:
  fast-import: do not clear notes in do_change_note_fanout()
  t9300 (fast-import): another test for the "replace root" feature
  fast-import: tighten M 040000 syntax
  fast-import: filemodify after M 040000 <tree> "" crashes

3 years agoMerge branch 'rr/needs-clean-work-tree'
Junio C Hamano [Tue, 30 Nov 2010 01:52:32 +0000]
Merge branch 'rr/needs-clean-work-tree'

* rr/needs-clean-work-tree:
  Porcelain scripts: Rewrite cryptic "needs update" error message

3 years agoMerge branch 'kb/blame-author-email'
Junio C Hamano [Tue, 30 Nov 2010 01:52:32 +0000]
Merge branch 'kb/blame-author-email'

* kb/blame-author-email:
  blame: Add option to show author email instead of name

Conflicts:
t/annotate-tests.sh

3 years agoMerge branch 'cm/diff-check-at-eol'
Junio C Hamano [Tue, 30 Nov 2010 01:52:31 +0000]
Merge branch 'cm/diff-check-at-eol'

* cm/diff-check-at-eol:
  diff --check: correct line numbers of new blank lines at EOF

3 years agoMerge branch 'ak/apply-non-git-epoch'
Junio C Hamano [Tue, 30 Nov 2010 01:52:31 +0000]
Merge branch 'ak/apply-non-git-epoch'

* ak/apply-non-git-epoch:
  apply: handle patches with funny filename and colon in timezone
  apply: Recognize epoch timestamps with : in the timezone

3 years agoMerge branch 'tc/smart-http-post-redirect'
Junio C Hamano [Tue, 30 Nov 2010 01:52:30 +0000]
Merge branch 'tc/smart-http-post-redirect'

* tc/smart-http-post-redirect:
  smart-http: Don't change POST to GET when following redirect

3 years agoMerge branch 'en/and-cascade-tests'
Junio C Hamano [Fri, 26 Nov 2010 22:45:37 +0000]
Merge branch 'en/and-cascade-tests'

* en/and-cascade-tests:
  t7300: add a missing SYMLINKS prerequisite

3 years agot7300: add a missing SYMLINKS prerequisite
Johannes Sixt [Thu, 25 Nov 2010 08:03:39 +0000]
t7300: add a missing SYMLINKS prerequisite

The test fails on Windows since 2dec68c (tests: add missing &&, batch 2).

Even though this test allocates and leaves behind files, subsequent tests
do not depend on this, so it is safe to just skip it.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

4 years agoMerge branch 'cb/maint-orphan-merge-noclobber'
Junio C Hamano [Wed, 24 Nov 2010 23:55:36 +0000]
Merge branch 'cb/maint-orphan-merge-noclobber'

* cb/maint-orphan-merge-noclobber:
  do not overwrite untracked during merge from unborn branch

4 years agoMerge branch 'ao/send-email-irt'
Junio C Hamano [Wed, 24 Nov 2010 23:55:32 +0000]
Merge branch 'ao/send-email-irt'

* ao/send-email-irt:
  git-send-email.perl: make initial In-Reply-To apply only to first email
  t9001: send-email interation with --in-reply-to and --chain-reply-to

4 years agoMerge branch 'jk/add-e-doc'
Junio C Hamano [Wed, 24 Nov 2010 23:55:29 +0000]
Merge branch 'jk/add-e-doc'

* jk/add-e-doc:
  docs: give more hints about how "add -e" works
  docs: give more hints about how "add -e" works

4 years agoMerge branch 'rs/opt-help-text'
Junio C Hamano [Wed, 24 Nov 2010 23:55:19 +0000]
Merge branch 'rs/opt-help-text'

* rs/opt-help-text:
  verify-tag: document --verbose
  branch: improve --verbose description
  archive: improve --verbose description
  Describe various forms of "be quiet" using OPT__QUIET
  add OPT__FORCE
  add description parameter to OPT__QUIET
  add description parameter to OPT__DRY_RUN
  add description parameter to OPT__VERBOSE

4 years agoMerge branch 'kb/maint-rebase-autosquash'
Junio C Hamano [Wed, 24 Nov 2010 23:55:15 +0000]
Merge branch 'kb/maint-rebase-autosquash'

* kb/maint-rebase-autosquash:
  rebase: teach --autosquash to match on sha1 in addition to message
  rebase: better rearranging of fixup!/squash! lines with --autosquash

4 years agoMerge branch 'mm/phrase-remote-tracking'
Junio C Hamano [Wed, 24 Nov 2010 23:55:05 +0000]
Merge branch 'mm/phrase-remote-tracking'

* mm/phrase-remote-tracking:
  git-branch.txt: mention --set-upstream as a way to change upstream configuration
  user-manual: remote-tracking can be checked out, with detached HEAD
  user-manual.txt: explain better the remote(-tracking) branch terms
  Change incorrect "remote branch" to "remote tracking branch" in C code
  Change incorrect uses of "remote branch" meaning "remote-tracking"
  Change "tracking branch" to "remote-tracking branch"
  everyday.txt: change "tracking branch" to "remote-tracking branch"
  Change remote tracking to remote-tracking in non-trivial places
  Replace "remote tracking" with "remote-tracking"
  Better "Changed but not updated" message in git-status

4 years agoMerge branch 'en/and-cascade-tests'
Junio C Hamano [Wed, 24 Nov 2010 23:51:49 +0000]
Merge branch 'en/and-cascade-tests'

* en/and-cascade-tests: (25 commits)
  t4124 (apply --whitespace): use test_might_fail
  t3404: do not use 'describe' to implement test_cmp_rev
  t3404 (rebase -i): introduce helper to check position of HEAD
  t3404 (rebase -i): move comment to description
  t3404 (rebase -i): unroll test_commit loops
  t3301 (notes): use test_expect_code for clarity
  t1400 (update-ref): use test_must_fail
  t1502 (rev-parse --parseopt): test exit code from "-h"
  t6022 (renaming merge): chain test commands with &&
  test-lib: introduce test_line_count to measure files
  tests: add missing &&, batch 2
  tests: add missing &&
  Introduce sane_unset and use it to ensure proper && chaining
  t7800 (difftool): add missing &&
  t7601 (merge-pull-config): add missing &&
  t7001 (mv): add missing &&
  t6016 (rev-list-graph-simplify-history): add missing &&
  t5602 (clone-remote-exec): add missing &&
  t4026 (color): remove unneeded and unchained command
  t4019 (diff-wserror): add lots of missing &&
  ...

Conflicts:
t/t7006-pager.sh

4 years agoMerge branch 'maint'
Junio C Hamano [Wed, 24 Nov 2010 21:24:49 +0000]
Merge branch 'maint'

* maint:
  imap-send: link against libcrypto for HMAC and others
  git-send-email.perl: Deduplicate "to:" and "cc:" entries with names
  mingw: do not set errno to 0 on success

4 years agoMerge branch 'jl/maint-pull-tags-doc' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:47:42 +0000]
Merge branch 'jl/maint-pull-tags-doc' into maint

* jl/maint-pull-tags-doc:
  pull: Remove --tags option from manpage

4 years agoMerge branch 'kb/maint-diff-ws-check' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:47:27 +0000]
Merge branch 'kb/maint-diff-ws-check' into maint

* kb/maint-diff-ws-check:
  diff: handle lines containing only whitespace and tabs better
  test-lib: extend test_decode_color to handle more color codes

4 years agoMerge branch 'jm/mailmap' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:47:18 +0000]
Merge branch 'jm/mailmap' into maint

* jm/mailmap:
  t4203: do not let "git shortlog" DWIM based on tty
  t4203 (mailmap): stop hardcoding commit ids and dates
  mailmap: fix use of freed memory

4 years agoMerge branch 'tr/maint-git-repack-tmpfile' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:47:10 +0000]
Merge branch 'tr/maint-git-repack-tmpfile' into maint

* tr/maint-git-repack-tmpfile:
  repack: place temporary packs under .git/objects/pack/

4 years agoMerge branch 'jk/maint-apply-no-binary' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:47:04 +0000]
Merge branch 'jk/maint-apply-no-binary' into maint

* jk/maint-apply-no-binary:
  apply: don't segfault on binary files with missing data

4 years agoMerge branch 'jn/send-pack-error' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:46:46 +0000]
Merge branch 'jn/send-pack-error' into maint

* jn/send-pack-error:
  send-pack: avoid redundant "pack-objects died with strange error"

4 years agoMerge branch 'ak/submodule-sync' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:46:40 +0000]
Merge branch 'ak/submodule-sync' into maint

* ak/submodule-sync:
  submodule sync: Update "submodule.<name>.url" for empty directories

4 years agoMerge branch 'jk/maint-rev-list-nul' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:46:32 +0000]
Merge branch 'jk/maint-rev-list-nul' into maint

* jk/maint-rev-list-nul:
  rev-list: handle %x00 NUL in user format

4 years agoMerge branch 'cb/diff-fname-optim' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:46:26 +0000]
Merge branch 'cb/diff-fname-optim' into maint

* cb/diff-fname-optim:
  diff: avoid repeated scanning while looking for funcname
  do not search functions for patch ID
  add rebase patch id tests

4 years agoMerge branch 'jk/no-textconv-symlink' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:46:20 +0000]
Merge branch 'jk/no-textconv-symlink' into maint

* jk/no-textconv-symlink:
  diff: don't use pathname-based diff drivers for symlinks

4 years agoMerge branch 'dk/maint-blame-el' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:46:17 +0000]
Merge branch 'dk/maint-blame-el' into maint

* dk/maint-blame-el:
  git-blame.el: Add (require 'format-spec)

4 years agoMerge branch 'aw/git-p4-deletion' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:46:14 +0000]
Merge branch 'aw/git-p4-deletion' into maint

* aw/git-p4-deletion:
  Fix handling of git-p4 on deleted files

4 years agoMerge branch 'kf/post-receive-sample-hook' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:45:39 +0000]
Merge branch 'kf/post-receive-sample-hook' into maint

* kf/post-receive-sample-hook:
  post-receive-email: ensure sent messages are not empty

4 years agoMerge branch 'jk/repack-reuse-object' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:45:07 +0000]
Merge branch 'jk/repack-reuse-object' into maint

* jk/repack-reuse-object:
  Documentation: pack.compression: explain how to recompress
  repack: add -F flag to let user choose between --no-reuse-delta/object

Conflicts:
Documentation/git-repack.txt

4 years agoMerge branch 'bc/fix-cherry-pick-root' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:44:46 +0000]
Merge branch 'bc/fix-cherry-pick-root' into maint

* bc/fix-cherry-pick-root:
  builtin/revert.c: don't dereference a NULL pointer

4 years agoMerge branch 'uk/fix-author-ident-sed-script' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:44:41 +0000]
Merge branch 'uk/fix-author-ident-sed-script' into maint

* uk/fix-author-ident-sed-script:
  get_author_ident_from_commit(): remove useless quoting

4 years agoMerge branch 'ab/makefile-track-cc' into maint
Junio C Hamano [Wed, 24 Nov 2010 20:44:35 +0000]
Merge branch 'ab/makefile-track-cc' into maint

* ab/makefile-track-cc:
  Makefile: add CC to TRACK_CFLAGS