Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Apr 11, 2012

  1. Jeff King

    gc: do not explode objects which will be immediately pruned

    When we pack everything into one big pack with "git repack
    -Ad", any unreferenced objects in to-be-deleted packs are
    exploded into loose objects, with the intent that they will
    be examined and possibly cleaned up by the next run of "git
    prune".
    
    Since the exploded objects will receive the mtime of the
    pack from which they come, if the source pack is old, those
    loose objects will end up pruned immediately. In that case,
    it is much more efficient to skip the exploding step
    entirely for these objects.
    
    This patch teaches pack-objects to receive the expiration
    information and avoid writing these objects out. It also
    teaches "git gc" to pass the value of gc.pruneexpire to
    repack (which in turn learns to pass it along to
    pack-objects) so that this optimization happens
    automatically during "git gc" and "git gc --auto".
    
    Signed-off-by: Jeff King <peff@peff.net>
    Acked-by: Nicolas Pitre <nico@fluxnic.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored April 07, 2012 gitster committed April 11, 2012

Nov 17, 2010

  1. Junio C Hamano

    Merge branch 'tr/maint-git-repack-tmpfile'

    * tr/maint-git-repack-tmpfile:
      repack: place temporary packs under .git/objects/pack/
    authored November 17, 2010

Oct 19, 2010

  1. trast

    repack: place temporary packs under .git/objects/pack/

    git-pack-objects is already careful to start out its temporary packs
    under .git/objects/pack/ (cf. 8b4eb6b, Do not perform cross-directory
    renames when creating packs, 2008-09-22), but git-repack did not
    respond in kind so the effort was lost when the filesystem boundary is
    exactly at that directory.
    
    Let git-repack pass a path under .git/objects/pack/ as the base for
    its temporary packs.
    
    This means we might need the $PACKDIR sooner (before the pack-objects
    invocation), so move the mkdir up just to be safe.
    
    Also note that the only use of *.pack is in the find invocation way
    before the pack-objects call, so the temporary packs will not suddenly
    show up in any wildcards because of the directory change.
    
    Reported-by: Marat Radchenko <marat@slonopotamus.org>
    Signed-off-by: Thomas Rast <trast@student.ethz.ch>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored October 19, 2010 gitster committed October 19, 2010

Sep 27, 2010

  1. Jan Krüger

    repack: add -F flag to let user choose between --no-reuse-delta/object

    In 479b56b ('make "repack -f" imply "pack-objects --no-reuse-object"'),
    git repack -f was changed to include recompressing all objects on the
    zlib level on the assumption that if the user wants to spend that much
    time already, some more time won't hurt (and recompressing is useful if
    the user changed the zlib compression level).
    
    However, "some more time" can be quite long with very big repositories,
    so some users are going to appreciate being able to choose. If we are
    going to give them the choice, --no-reuse-object will probably be
    interesting a lot less frequently than --no-reuse-delta. Hence, this
    reverts -f to the old behaviour (--no-reuse-delta) and adds a new -F
    option that replaces the current -f.
    
    Measurements taken using this patch on a current clone of git.git
    indicate a 17% decrease in time being made available to users:
    
    git repack -Adf  34.84s user 0.56s system 145% cpu 24.388 total
    git repack -AdF  38.79s user 0.56s system 133% cpu 29.394 total
    
    Signed-off-by: Jan Krüger <jk@jk.gs>
    Acked-by: Nicolas Pitre <nico@fluxnic.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored September 27, 2010 gitster committed September 27, 2010

Jul 25, 2009

  1. Junio C Hamano

    Merge branch 'js/maint-graft-unhide-true-parents'

    * js/maint-graft-unhide-true-parents:
      git repack: keep commits hidden by a graft
      Add a test showing that 'git repack' throws away grafted-away parents
    
    Conflicts:
    	git-repack.sh
    authored July 25, 2009

Jul 24, 2009

  1. dscho

    git repack: keep commits hidden by a graft

    When you have grafts that pretend that a given commit has different
    parents than the ones recorded in the commit object, it is dangerous
    to let 'git repack' remove those hidden parents, as you can easily
    remove the graft and end up with a broken repository.
    
    So let's play it safe and keep those parent objects and everything
    that is reachable by them, in addition to the grafted parents.
    
    As this behavior can only be triggered by git pack-objects, and as that
    command handles duplicate parents gracefully, we do not bother to cull
    duplicated parents that may result by using both true and grafted
    parents.
    
    Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored July 23, 2009 gitster committed July 24, 2009

Jun 18, 2009

  1. Stephen Boyd

    submodule, repack: migrate to git-sh-setup's say()

    Now that there is say() in git-sh-setup, these scripts don't need to use
    their own. Migrate them over by setting GIT_QUIET and removing their
    custom say() functions.
    
    Signed-off-by: Stephen Boyd <bebarino@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored June 16, 2009 gitster committed June 18, 2009

Apr 05, 2009

  1. Junio C Hamano

    Merge branch 'maint'

    * maint:
      git submodule: fix usage line
      doc/git-pack-refs: fix two grammar issues
      commit: abort commit if interactive add failed
      git-repack: use non-dashed update-server-info
    authored April 05, 2009
  2. Dan McGee

    git-repack: use non-dashed update-server-info

    Signed-off-by: Dan McGee <dpmcgee@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored April 04, 2009 gitster committed April 05, 2009

Apr 02, 2009

  1. Junio C Hamano

    Merge branch 'jc/maint-1.6.0-keep-pack'

    * jc/maint-1.6.0-keep-pack:
      pack-objects: don't loosen objects available in alternate or kept packs
      t7700: demonstrate repack flaw which may loosen objects unnecessarily
      Remove --kept-pack-only option and associated infrastructure
      pack-objects: only repack or loosen objects residing in "local" packs
      git-repack.sh: don't use --kept-pack-only option to pack-objects
      t7700-repack: add two new tests demonstrating repacking flaws
    
    Conflicts:
    	t/t7700-repack.sh
    authored April 01, 2009

Mar 20, 2009

  1. git-repack.sh: don't use --kept-pack-only option to pack-objects

    The --kept-pack-only option to pack-objects treats all kept packs as equal.
    This results in objects that reside in an alternate pack that has a .keep
    file, not being packed into a newly created pack when the user specifies the
    -a option to repack.  Since the user may not have any control over the
    alternate database, git should not refrain from repacking those objects
    even though they are in a pack with a .keep file.
    
    This fixes the 'packed obs in alternate ODB kept pack are repacked' test in
    t7700.
    
    Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored March 19, 2009 gitster committed March 20, 2009

Mar 11, 2009

  1. Junio C Hamano

    Merge branch 'jc/maint-1.6.0-keep-pack'

    * jc/maint-1.6.0-keep-pack:
      is_kept_pack(): final clean-up
      Simplify is_kept_pack()
      Consolidate ignore_packed logic more
      has_sha1_kept_pack(): take "struct rev_info"
      has_sha1_pack(): refactor "pretend these packs do not exist" interface
      git-repack: resist stray environment variable
    authored March 11, 2009

Feb 28, 2009

  1. Junio C Hamano

    Simplify is_kept_pack()

    This removes --unpacked=<packfile> parameter from the revision parser, and
    rewrites its use in git-repack to pass a single --kept-pack-only option
    instead.
    
    The new --kept-pack-only option means just that.  When this option is
    given, is_kept_pack() that used to say "not on the --unpacked=<packfile>
    list" now says "the packfile has corresponding .keep file".
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored February 28, 2009
  2. Junio C Hamano

    git-repack: resist stray environment variable

    The script used $args and $existing without initializing it to empty.  It
    would have been confused by an environment variable the end user had
    before running it.
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored February 27, 2009

Feb 12, 2009

  1. Junio C Hamano

    Make repack less likely to corrupt repository

    Some platforms refuse to rename a file that is open.  When repacking an
    already packed repository without adding any new object, the resulting
    pack will contain the same set of objects as an existing pack, and on such
    platforms, a newly created packfile cannot replace the existing one.
    
    The logic detected this issue but did not try hard enough to recover from
    it.  Especially because the files that needs renaming come in pairs, there
    potentially are different failure modes that one can be renamed but the
    others cannot.  Asking manual recovery to end users were error prone.
    
    This patch tries to make it more robust by first making sure all the
    existing files that need to be renamed have been renamed before
    continuing, and attempts to roll back if some failed to rename.
    
    This is based on an initial patch by Robin Rosenberg.
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored February 10, 2009

Nov 15, 2008

  1. repack: only unpack-unreachable if we are deleting redundant packs

    The -A option calls pack-objects with the --unpack-unreachable option so
    that the unreachable objects in local packs are left in the local object
    store loose. But if the -d option to repack was _not_ used, then these
    unpacked loose objects are redundant and unnecessary.
    
    Update tests in t7701.
    
    Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored November 13, 2008 gitster committed November 14, 2008

Nov 12, 2008

  1. repack: do not fall back to incremental repacking with [-a|-A]

    When repack is called with either the -a or -A option, the user has
    requested to repack all objects including those referenced by the
    alternates mechanism. Currently, if there are no local packs without
    .keep files, then repack will call pack-objects with the
    '--unpacked --incremental' options which causes it to exclude alternate
    packed objects. So, remove this fallback.
    
    Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored November 12, 2008 gitster committed November 12, 2008
  2. repack: don't repack local objects in packs with .keep file

    If the user created a .keep file for a local pack, then it can be inferred
    that the user does not want those objects repacked.
    
    This fixes the repack bug tested by t7700.
    
    Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored November 12, 2008 gitster committed November 12, 2008

Sep 20, 2008

  1. Mikachu

    git-repack uses --no-repack-object, not --no-repack-delta.

    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored September 19, 2008 gitster committed September 19, 2008

Jul 13, 2008

  1. Stephan Beyer

    Make usage strings dash-less

    When you misuse a git command, you are shown the usage string.
    But this is currently shown in the dashed form.  So if you just
    copy what you see, it will not work, when the dashed form
    is no longer supported.
    
    This patch makes git commands show the dash-less version.
    
    For shell scripts that do not specify OPTIONS_SPEC, git-sh-setup.sh
    generates a dash-less usage string now.
    
    Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored July 13, 2008 gitster committed July 13, 2008

Jun 25, 2008

  1. repack.usedeltabaseoffset config option now defaults to "true"

    As announced for 1.6.0.
    
    Access over the native protocol by old git versions is unaffected as
    this capability is negociated by the protocol.  Otherwise setting this
    config option to "false" and doing a 'git repack -a -d' is enough to
    remain compatible with ancient git versions (older than 1.4.4).
    
    Signed-off-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored June 25, 2008 gitster committed June 25, 2008

May 31, 2008

  1. Linus Torvalds

    Remove now unnecessary 'sync()' calls

    Since the pack-files are now always created stably on disk, there is no
    need to sync() before pruning lose objects or old stale pack-files.
    
    [jc: with Nico's clean-up]
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored May 30, 2008 gitster committed May 31, 2008

May 23, 2008

  1. Junio C Hamano

    Merge branch 'bc/repack'

    * bc/repack:
      Documentation/git-repack.txt: document new -A behaviour
      let pack-objects do the writing of unreachable objects as loose objects
      add a force_object_loose() function
      builtin-gc.c: deprecate --prune, it now really has no effect
      git-gc: always use -A when manually repacking
      repack: modify behavior of -A option to leave unreferenced objects unpacked
    
    Conflicts:
    
    	builtin-pack-objects.c
    authored May 23, 2008

May 14, 2008

  1. let pack-objects do the writing of unreachable objects as loose objects

    Commit ccc1297 changed the behavior
    of 'git repack -A' so unreachable objects are stored as loose objects.
    However it did so in a naive and inn efficient way by making packs
    about to be deleted inaccessible and feeding their content through
    'git unpack-objects'.  While this works, there are major flaws with
    this approach:
    
    - It is unacceptably sloooooooooooooow.
    
      In the Linux kernel repository with no actual unreachable objects,
      doing 'git repack -A -d' before:
    
    	real    2m33.220s
    	user    2m21.675s
    	sys     0m3.510s
    
      And with this change:
    
    	real    0m36.849s
    	user    0m24.365s
    	sys     0m1.950s
    
      For reference, here's the timing for 'git repack -a -d':
    
    	real    0m35.816s
    	user    0m22.571s
    	sys     0m2.011s
    
      This is explained by the fact that 'git unpack-objects' was used to
      unpack _every_ objects even if (almost) 100% of them were thrown away.
    
    - There is a black out period.
    
      Between the removal of the .idx file for the redundant pack and the
      completion of its unpacking, the unreachable objects become completely
      unaccessible.  This is not a big issue as we're talking about unreachable
      objects, but some consistency is always good.
    
    - There is no way to easily set a sensible mtime for the newly created
      unreachable loose objects.
    
    So, while having a command called "pack-objects" to perform object
    unpacking looks really odd, this is probably the best compromize to be
    able to solve the above issues in an efficient way.
    
    Signed-off-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored May 14, 2008 gitster committed May 13, 2008

May 11, 2008

  1. Brandon Casey

    repack: modify behavior of -A option to leave unreferenced objects un…

    …packed
    
    The previous behavior of the -A option was to retain any previously
    packed objects which had become unreferenced, and place them into the newly
    created pack file.  Since git-gc, when run automatically with the --auto
    option, calls repack with the -A option, this had the effect of retaining
    unreferenced packed objects indefinitely. To avoid this scenario, the
    user was required to run git-gc with the little known --prune option or
    to manually run repack with the -a option.
    
    This patch changes the behavior of the -A option so that unreferenced
    objects that exist in any pack file being replaced, will be unpacked into
    the repository. The unreferenced loose objects can then be garbage collected
    by git-gc (i.e. git-prune) based on the gc.pruneExpire setting.
    
    Also add new tests for checking whether unreferenced objects which were
    previously packed are properly left in the repository unpacked after
    repacking.
    
    Signed-off-by: Brandon Casey <drafnel@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored May 09, 2008 gitster committed May 11, 2008
  2. A Large Angry SCM

    git-repack: re-enable parsing of -n command line option

    In commit 5715d0b (Migrate git-repack.sh to use git-rev-parse --parseopt,
    2007-11-04), parsing of the '-n' command line option was accidentally lost
    when git-repack.sh was migrated to use git-rev-parse --parseopt. This adds
    it back.
    
    Signed-off-by: A Large Angry SCM <gitzilla@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored May 10, 2008 gitster committed May 11, 2008

Nov 06, 2007

  1. Pierre Habouzit

    Migrate git-repack.sh to use git-rev-parse --parseopt

    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored November 04, 2007 gitster committed November 05, 2007

Oct 19, 2007

  1. Shawn O. Pearce

    Stop displaying "Pack pack-$ID created." during git-gc

    Discussion on the list tonight came to the conclusion that showing
    the name of the packfile we just created during git-repack is not
    a very useful message for any end-user.  For the really technical
    folk who need to have the name of the newest packfile they can use
    something such as `ls -t .git/objects/pack | head -2` to find the
    most recently created packfile.
    
    Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
    authored October 19, 2007

Oct 03, 2007

  1. Junio C Hamano

    Merge branch 'jc/autogc'

    * jc/autogc:
      git-gc --auto: run "repack -A -d -l" as necessary.
      git-gc --auto: restructure the way "repack" command line is built.
      git-gc --auto: protect ourselves from accumulated cruft
      git-gc --auto: add documentation.
      git-gc --auto: move threshold check to need_to_gc() function.
      repack -A -d: use --keep-unreachable when repacking
      pack-objects --keep-unreachable
      Export matches_pack_name() and fix its return value
      Invoke "git gc --auto" from commit, merge, am and rebase.
      Implement git gc --auto
    authored October 03, 2007

Sep 23, 2007

  1. Supplant the "while case ... break ;; esac" idiom

    A lot of shell scripts contained stuff starting with
    
    	while case "$#" in 0) break ;; esac
    
    and similar.  I consider breaking out of the condition instead of the
    body od the loop ugly, and the implied "true" value of the
    non-matching case is not really obvious to humans at first glance.  It
    happens not to be obvious to some BSD shells, either, but that's
    because they are not POSIX-compliant.  In most cases, this has been
    replaced by a straight condition using "test".  "case" has the
    advantage of being faster than "test" on vintage shells where "test"
    is not a builtin.  Since none of them is likely to run the git
    scripts, anyway, the added readability should be worth the change.
    
    A few loops have had their termination condition expressed
    differently.
    
    Signed-off-by: David Kastrup <dak@gnu.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored September 23, 2007 gitster committed September 23, 2007

Sep 18, 2007

  1. Junio C Hamano

    repack -A -d: use --keep-unreachable when repacking

    This is a safer variant of "repack -a -d" that does not drop
    unreachable objects that are in packs.
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored September 16, 2007

Jul 12, 2007

  1. Brian Downing

    Add --window-memory option to git-repack

    Signed-off-by: Brian Downing <bdowning@lavos.net>
    Acked-by: Nicolas Pitre <nico@cam.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored July 12, 2007 gitster committed July 12, 2007

Jul 04, 2007

  1. repack: don't report "Nothing new to pack." if -q is given

    Signed-off-by: Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored July 03, 2007 gitster committed July 04, 2007

Jul 03, 2007

  1. Junio C Hamano

    Rewrite "git-frotz" to "git frotz"

    This uses the remove-dashes target to replace "git-frotz" to "git frotz".
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
    authored July 02, 2007

May 25, 2007

  1. 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>
    authored May 24, 2007 Junio C Hamano committed May 24, 2007
Something went wrong with that request. Please try again.