Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Commits on Jun 27, 2009
  1. @trast @gitster

    Convert existing die(..., strerror(errno)) to die_errno()

    trast authored gitster committed
    Change calls to die(..., strerror(errno)) to use the new die_errno().
    
    In the process, also make slight style adjustments: at least state
    _something_ about the function that failed (instead of just printing
    the pathname), and put paths in single quotes.
    
    Signed-off-by: Thomas Rast <trast@student.ethz.ch>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Oct 10, 2008
  1. @spearce

    Merge branch 'maint'

    spearce authored
    * maint:
      rebase -i: do not fail when there is no commit to cherry-pick
      test-lib: fix color reset in say_color()
      fix pread()'s short read in index-pack
    
    Conflicts:
    	csum-file.c
  2. @spearce

    fix pread()'s short read in index-pack

    Nicolas Pitre authored spearce committed
    Since v1.6.0.2~13^2~ the completion of a thin pack uses sha1write() for
    its ability to compute a SHA1 on the written data.  This also provides
    data buffering which, along with commit 92392b4, will confuse pread()
    whenever an appended object is 1) freed due to memory pressure because
    of the depth-first delta processing, and 2) needed again because it has
    many delta children, and 3) its data is still buffered by sha1write().
    
    Let's fix the issue by simply forcing cached data out when such an
    object is written so it can be pread()'d at leisure.
    
    Signed-off-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Commits on Oct 3, 2008
  1. @spearce

    fix openssl headers conflicting with custom SHA1 implementations

    Nicolas Pitre authored spearce committed
    On ARM I have the following compilation errors:
    
        CC fast-import.o
    In file included from cache.h:8,
                     from builtin.h:6,
                     from fast-import.c:142:
    arm/sha1.h:14: error: conflicting types for 'SHA_CTX'
    /usr/include/openssl/sha.h:105: error: previous declaration of 'SHA_CTX' was here
    arm/sha1.h:16: error: conflicting types for 'SHA1_Init'
    /usr/include/openssl/sha.h:115: error: previous declaration of 'SHA1_Init' was here
    arm/sha1.h:17: error: conflicting types for 'SHA1_Update'
    /usr/include/openssl/sha.h:116: error: previous declaration of 'SHA1_Update' was here
    arm/sha1.h:18: error: conflicting types for 'SHA1_Final'
    /usr/include/openssl/sha.h:117: error: previous declaration of 'SHA1_Final' was here
    make: *** [fast-import.o] Error 1
    
    This is because openssl header files are always included in
    git-compat-util.h since commit 684ec6c whenever NO_OPENSSL is not
    set, which somehow brings in <openssl/sha1.h> clashing with the custom
    ARM version.  Compilation of git is probably broken on PPC too for the
    same reason.
    
    Turns out that the only file requiring openssl/ssl.h and openssl/err.h
    is imap-send.c.  But only moving those problematic includes there
    doesn't solve the issue as it also includes cache.h which brings in the
    conflicting local SHA1 header file.
    
    As suggested by Jeff King, the best solution is to rename our references
    to SHA1 functions and structure to something git specific, and define those
    according to the implementation used.
    
    Signed-off-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Commits on Sep 3, 2008
  1. @gitster

    sha1write: don't copy full sized buffers

    Nicolas Pitre authored gitster committed
    No need to memcpy() source buffer data when we might just process the
    data in place instead of accumulating it into a separate buffer.
    This is the case when a whole buffer would have been copied, summed,
    written out and then discarded right away.
    
    Also move the CRC32 processing within the loop so the data is more likely
    to remain in the L1 CPU cache between the CRC32 sum, SHA1 sum and the
    write call.
    
    Signed-off-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Aug 30, 2008
  1. @gitster

    pack-objects: use fixup_pack_header_footer()'s validation mode

    Nicolas Pitre authored gitster committed
    When limiting the pack size, a new header has to be written to the
    pack and a new SHA1 computed.  Make sure that the SHA1 of what is being
    read back matches the SHA1 of what was written.
    
    Signed-off-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on May 31, 2008
  1. @torvalds @gitster

    Make pack creation always fsync() the result

    torvalds authored gitster committed
    This means that we can depend on packs always being stable on disk,
    simplifying a lot of the object serialization worries.  And unlike loose
    objects, serializing pack creation IO isn't going to be a performance
    killer.
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Nov 5, 2007
  1. @gitster

    remove dead code from the csum-file interface

    Nicolas Pitre authored gitster committed
    The provided name argument is always constant and valid in every
    caller's context, so no need to have an array of PATH_MAX chars to copy
    it into when a simple pointer will do.  Unfortunately that means getting
    rid of wascally wabbits too.
    
    The 'error' field is also unused.
    
    Signed-off-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  2. @gitster

    make display of total transferred more accurate

    Nicolas Pitre authored gitster committed
    The throughput display needs a delay period before accounting and
    displaying anything.  Yet it might be called after some amount of data
    has already been transferred.  The display of total data is therefore
    accounted late and therefore smaller than the reality.
    
    Let's call display_throughput() with an absolute amount of transferred
    data instead of a relative number, and let the throughput code find the
    relative amount of data by itself as needed.  This way the displayed
    total is always exact.
    
    Signed-off-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Oct 30, 2007
  1. @gitster

    add throughput display to git-push

    Nicolas Pitre authored gitster committed
    This one triggers only when git-pack-objects is called with
    --all-progress and --stdout which is the combination used by
    git-push.
    
    Signed-off-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Oct 17, 2007
  1. @spearce

    pack-objects.c: fix some global variable abuse and memory leaks

    Nicolas Pitre authored spearce committed
    To keep things well layered, sha1close() now returns the file descriptor
    when it doesn't close the file.
    
    An ugly cast was added to the return of write_idx_file() to avoid a
    warning.  A proper fix will come separately.
    
    Signed-off-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Commits on Jun 13, 2007
  1. @gitster

    More static

    gitster authored
    There still are quite a few symbols that ought to be static.
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on May 21, 2007
  1. Alter sha1close() 3rd argument to request flush only

    Dana L. How authored Junio C Hamano committed
    update=0 suppressed writing the final SHA-1 but was not used.
    Now final=0 suppresses SHA-1 finalization, SHA-1 writing,
    and closing -- in other words,  only flush the buffer.
    
    Signed-off-by: Dana L. How <danahow@gmail.com>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on May 10, 2007
  1. Custom compression levels for objects and packs

    Dana How authored Junio C Hamano committed
    Add config variables pack.compression and core.loosecompression ,
    and switch --compression=level to pack-objects.
    
    Loose objects will be compressed using core.loosecompression if set,
    else core.compression if set, else Z_BEST_SPEED.
    Packed objects will be compressed using --compression=level if seen,
    else pack.compression if set, else core.compression if set,
    else Z_DEFAULT_COMPRESSION.  This is the "pack compression level".
    
    Loose objects added to a pack undeltified will be recompressed
    to the pack compression level if it is unequal to the current
    loose compression level by the preceding rules,  or if the loose
    object was written while core.legacyheaders = true.  Newly
    deltified loose objects are always compressed to the current
    pack compression level.
    
    Previously packed objects added to a pack are recompressed
    to the current pack compression level exactly when their
    deltification status changes,  since the previous pack data
    cannot be reused.
    
    In either case,  the --no-reuse-object switch from the first
    patch below will always force recompression to the current pack
    compression level,  instead of assuming the pack compression level
    hasn't changed and pack data can be reused when possible.
    
    This applies on top of the following patches from Nicolas Pitre:
    [PATCH] allow for undeltified objects not to be reused
    [PATCH] make "repack -f" imply "pack-objects --no-reuse-object"
    
    Signed-off-by: Dana L. How <danahow@gmail.com>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Apr 10, 2007
  1. compute a CRC32 for each object as stored in a pack

    Nicolas Pitre authored Junio C Hamano committed
    The most important optimization for performance when repacking is the
    ability to reuse data from a previous pack as is and bypass any delta
    or even SHA1 computation by simply copying the raw data from one pack
    to another directly.
    
    The problem with  this is that any data corruption within a copied object
    would go unnoticed and the new (repacked) pack would be self-consistent
    with its own checksum despite containing a corrupted object.  This is a
    real issue that already happened at least once in the past.
    
    In some attempt to prevent this, we validate the copied data by inflating
    it and making sure no error is signaled by zlib.  But this is still not
    perfect as a significant portion of a pack content is made of object
    headers and references to delta base objects which are not deflated and
    therefore not validated when repacking actually making the pack data reuse
    still not as safe as it could be.
    
    Of course a full SHA1 validation could be performed, but that implies
    full data inflating and delta replaying which is extremely costly, which
    cost the data reuse optimization was designed to avoid in the first place.
    
    So the best solution to this is simply to store a CRC32 of the raw pack
    data for each object in the pack index.  This way any object in a pack can
    be validated before being copied as is in another pack, including header
    and any other non deflated data.
    
    Why CRC32 instead of a faster checksum like Adler32?  Quoting Wikipedia:
    
       Jonathan Stone discovered in 2001 that Adler-32 has a weakness for very
       short messages. He wrote "Briefly, the problem is that, for very short
       packets, Adler32 is guaranteed to give poor coverage of the available
       bits. Don't take my word for it, ask Mark Adler. :-)" The problem is
       that sum A does not wrap for short messages. The maximum value of A for
       a 128-byte message is 32640, which is below the value 65521 used by the
       modulo operation. An extended explanation can be found in RFC 3309,
       which mandates the use of CRC32 instead of Adler-32 for SCTP, the
       Stream Control Transmission Protocol.
    
    In the context of a GIT pack, we have lots of small objects, especially
    deltas, which are likely to be quite small and in a size range for which
    Adler32 is dimed not to be sufficient.  Another advantage of CRC32 is the
    possibility for recovery from certain types of small corruptions like
    single bit errors which are the most probable type of corruptions.
    
    OK what this patch does is to compute the CRC32 of each object written to
    a pack within pack-objects.  It is not written to the index yet and it is
    obviously not validated when reusing pack data yet either.
    
    Signed-off-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Aug 23, 2006
  1. @spearce

    Convert memcpy(a,b,20) to hashcpy(a,b).

    spearce authored Junio C Hamano committed
    This abstracts away the size of the hash values when copying them
    from memory location to memory location, much as the introduction
    of hashcmp abstracted away hash value comparsion.
    
    A few call sites were using char* rather than unsigned char* so
    I added the cast rather than open hashcpy to be void*.  This is a
    reasonable tradeoff as most call sites already use unsigned char*
    and the existing hashcmp is also declared to be unsigned char*.
    
    [jc: Splitted the patch to "master" part, to be followed by a
     patch for merge-recursive.c which is not in "master" yet.
    
     Fixed the cast in the latter hunk to combine-diff.c which was
     wrong in the original.
    
     Also converted ones left-over in combine-diff.c, diff-lib.c and
     upload-pack.c ]
    
    Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Aug 15, 2006
  1. Make sha1flush void and remove conditional return.

    David Rientjes authored Junio C Hamano committed
    Signed-off-by: David Rientjes <rientjes@google.com>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Jul 3, 2006
  1. Make zlib compression level configurable, and change default.

    Joachim B Haga authored Junio C Hamano committed
    With the change in default, "git add ." on kernel dir is about
    twice as fast as before, with only minimal (0.5%) change in
    object size. The speed difference is even more noticeable
    when committing large files, which is now up to 8 times faster.
    
    The configurability is through setting core.compression = [-1..9]
    which maps to the zlib constants; -1 is the default, 0 is no
    compression, and 1..9 are various speed/size tradeoffs, 9
    being slowest.
    
    Signed-off-by: Joachim B Haga (cjhaga@fys.uio.no)
    Acked-by: Linus Torvalds <torvalds@osdl.org>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Jun 20, 2006
  1. Remove all void-pointer arithmetic.

    Florian Forster authored Junio C Hamano committed
    ANSI C99 doesn't allow void-pointer arithmetic. This patch fixes this in
    various ways. Usually the strategy that required the least changes was used.
    
    Signed-off-by: Florian Forster <octo@verplant.org>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Dec 20, 2005
  1. xread/xwrite: do not worry about EINTR at calling sites.

    Junio C Hamano authored
    We had errno==EINTR check after read(2)/write(2) sprinkled all
    over the places, always doing continue.  Consolidate them into
    xread()/xwrite() wrapper routines.
    
    Credits for suggestion goes to HPA -- bugs are mine.
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Aug 9, 2005
  1. @sigprof

    [PATCH] Plug memory leak in sha1close()

    sigprof authored Junio C Hamano committed
    sha1create() and sha1fd() malloc the returned struct sha1file;
    sha1close() should free it.
    
    Signed-off-by: Sergey Vlasov <vsu@altlinux.ru>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Jul 6, 2005
  1. [PATCH] Let umask do its work upon filesystem object creation.

    Junio C Hamano authored Linus Torvalds committed
    IIRC our strategy was to let the users' umask take care of the
    final mode bits.  This patch fixes places that deviate from it.
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
    Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Commits on Jun 28, 2005
  1. csum-file: add "sha1fd()" to create a SHA1 csum file from an existing…

    Linus Torvalds authored
    … file descriptor
    
    We'll use this soon to write pack-files to stdout.
  2. csum-file: fix missing buf pointer update

    Linus Torvalds authored
    This would create broken pack archives for anything nontrivial.
Commits on Jun 27, 2005
  1. csum-file interface updates: return resulting SHA1

    Linus Torvalds authored
    Also, make the writing of the SHA1 as a end-header be conditional: not
    every user will necessarily want to write the SHA1 to the file itself,
    even though current users do (but we migh end up using the same helper
    functions for the object files themselves, that don't do this).
    
    This also makes the packed index file contain the SHA1 of the packed
    data file at the end (just before its own SHA1).  That way you can
    validate the pairing of the two if you want to.
  2. git-pack-objects: write the pack files with a SHA1 csum

    Linus Torvalds authored
    We want to be able to check their integrity later, and putting the
    sha1-sum of the contents at the end is a good thing.  The writing
    routines are generic, so we could try to re-use them for the index file,
    instead of having the same logic duplicated.
    
    Update unpack-objects to know about the extra 20 bytes at the end
    of the index.
Something went wrong with that request. Please try again.