Skip to content
Commits on Jan 6, 2012
  1. @peff @gitster

    upload-pack: avoid parsing tag destinations

    peff committed with gitster Jan 6, 2012
    When upload-pack advertises refs, it dereferences any tags
    it sees, and shows the resulting sha1 to the client. It does
    this by calling deref_tag. That function must load and parse
    each tag object to find the sha1 of the tagged object.
    However, it also ends up parsing the tagged object itself,
    which is not strictly necessary for upload-pack's use.
    Each tag produces two object loads (assuming it is not a
    recursive tag), when it could get away with only a single
    one. Dropping the second load halves the effort we spend.
    The downside is that we are no longer verifying the
    resulting object by loading it. In particular:
      1. We never cross-check the "type" field given in the tag
         object with the type of the pointed-to object.  If the
         tag says it points to a tag but doesn't, then we will
         keep peeling and realize the error.  If the tag says it
         points to a non-tag but actually points to a tag, we
         will stop peeling and just advertise the pointed-to
      2. If we are missing the pointed-to object, we will not
         realize (because we never even look it up in the object
    However, both of these are errors in the object database,
    and both will be detected if a client actually requests the
    broken objects in question. So we are simply pushing the
    verification away from the advertising stage, and down to
    the actual fetching stage.
    On my test repo with 120K refs, this drops the time to
    advertise the refs from ~3.2s to ~2.0s.
    Signed-off-by: Jeff King <>
    Signed-off-by: Junio C Hamano <>
Commits on Feb 7, 2011
  1. @pclouds @gitster

    Add const to parse_{commit,tag}_buffer()

    pclouds committed with gitster Feb 5, 2011
    Signed-off-by: Nguyễn Thái Ngọc Duy <>
    Signed-off-by: Junio C Hamano <>
Commits on Nov 10, 2010
  1. @mjg @gitster

    verify-tag: factor out signature detection

    mjg committed with gitster Nov 10, 2010
    into tag.h/c for later reuse and modification.
    Signed-off-by: Michael J Gruber <>
    Signed-off-by: Junio C Hamano <>
Commits on Apr 13, 2010
  1. @spearce @gitster

    tag.c: Parse tagger date (if present)

    spearce committed with gitster Apr 12, 2010
    Just like with committer dates, we parse the tagger date into the
    struct tag so its available for further downstream processing.
    However since the tagger header was not introduced until Git 0.99.1
    we must consider it optional.  For tags missing this header we use
    the default date of 0.
    Signed-off-by: Shawn O. Pearce <>
    Signed-off-by: Junio C Hamano <>
  2. @spearce @gitster

    tag.h: Remove unused signature field

    spearce committed with gitster Apr 12, 2010
    Its documented as unused.  So lets just drop it from the structure
    since we haven't ever used it.
    Signed-off-by: Shawn O. Pearce <>
    Signed-off-by: Junio C Hamano <>
Commits on Nov 3, 2005
  1. Be careful when dereferencing tags.

    Junio C Hamano committed Nov 2, 2005
    One caller of deref_tag() was not careful enough to make sure
    what deref_tag() returned was not NULL (i.e. we found a tag
    object that points at an object we do not have).  Fix it, and
    warn about refs that point at such an incomplete tag where
    Signed-off-by: Junio C Hamano <>
Commits on Aug 5, 2005
  1. Fix send-pack for non-commitish tags.

    Junio C Hamano committed Aug 5, 2005
    Again I left the v2.6.11-tree tag behind.  My bad.
    This commit makes sure that we do not barf when pushing a ref
    that is a non-commitish tag.  You can update a remote ref under
    the following conditions:
     * You can always use --force.
     * Creating a brand new ref is OK.
     * If the remote ref is exactly the same as what you are
       pushing, it is OK (nothing is pushed).
     * You can replace a commitish with another commitish which is a
       descendant of it, if you can verify the ancestry between them;
       this and the above means you have to have what you are replacing.
     * Otherwise you cannot update; you need to use --force.
    Signed-off-by: Junio C Hamano <>
Commits on Jun 8, 2005
  1. [PATCH] Anal retentive 'const unsigned char *sha1'

    Jason McMullan committed with Linus Torvalds Jun 3, 2005
    Make 'sha1' parameters const where possible
    Signed-off-by: Jason McMullan <>
    Signed-off-by: Linus Torvalds <>
Commits on May 6, 2005
  1. [PATCH] don't load and decompress objects twice with parse_object()

    Nicolas Pitre committed with Linus Torvalds May 6, 2005
    It turns out that parse_object() is loading and decompressing given
    object to free it just before calling the specific object parsing
    function which does mmap and decompress the same object again. This
    patch introduces the ability to parse specific objects directly from a
    memory buffer.
    Without this patch, running git-fsck-cache on the kernel repositorytake:
    	real    0m13.006s
    	user    0m11.421s
    	sys     0m1.218s
    With this patch applied:
    	real    0m8.060s
    	user    0m7.071s
    	sys     0m0.710s
    The performance increase is significant, and this is kind of a
    prerequisite for sane delta object support with fsck.
    Signed-off-by: Nicolas Pitre <>
    Signed-off-by: Linus Torvalds <>
Commits on Apr 28, 2005
  1. Fix up recent object model cleanups

    Linus Torvalds committed Apr 28, 2005
    Make sure the Makefile knows about the object header dependencies, and
    add declarations for tag lookup/parsing.
  2. [PATCH] Add tag header/parser to library

    Daniel Barkalow committed with Linus Torvalds Apr 28, 2005
    This adds preliminary support for tags in the library. It doesn't even
    store the signature, however, let alone provide any way of checking it.
    Signed-Off-By: Daniel Barkalow <>
    Signed-off-by: Linus Torvalds <>
Something went wrong with that request. Please try again.