Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

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/
    gitster authored

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 <>
    Signed-off-by: Thomas Rast <>
    Signed-off-by: Junio C Hamano <>
    trast authored gitster committed

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 <>
    Acked-by: Nicolas Pitre <>
    Signed-off-by: Junio C Hamano <>
    jast authored gitster committed

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
    gitster authored

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
    Signed-off-by: Johannes Schindelin <>
    Signed-off-by: Junio C Hamano <>
    dscho authored gitster committed

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 <>
    Signed-off-by: Junio C Hamano <>
    bebarino authored gitster committed

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
    gitster authored
  2. Dan McGee

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

    Signed-off-by: Dan McGee <>
    Signed-off-by: Junio C Hamano <>
    toofishes authored gitster committed

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 don't use --kept-pack-only option to pack-objects
      t7700-repack: add two new tests demonstrating repacking flaws
    gitster authored

Mar 20, 2009

  1. 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
    Signed-off-by: Brandon Casey <>
    Signed-off-by: Junio C Hamano <>
    Brandon Casey authored gitster committed

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
    gitster authored

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
    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 authored
  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 authored

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 authored

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 <>
    Signed-off-by: Junio C Hamano <>
    Brandon Casey authored gitster committed

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 <>
    Signed-off-by: Junio C Hamano <>
    Brandon Casey authored gitster committed
  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 <>
    Signed-off-by: Junio C Hamano <>
    Brandon Casey authored gitster committed

Sep 20, 2008

  1. Mikachu

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

    Signed-off-by: Junio C Hamano <>
    Mikachu authored gitster committed

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,
    generates a dash-less usage string now.
    Signed-off-by: Stephan Beyer <>
    Signed-off-by: Junio C Hamano <>
    sbeyer authored gitster committed

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 <>
    Signed-off-by: Junio C Hamano <>
    Nicolas Pitre authored gitster committed

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 <>
    Signed-off-by: Junio C Hamano <>
    torvalds authored gitster committed

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
    gitster authored

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 <>
    Signed-off-by: Junio C Hamano <>
    Nicolas Pitre authored gitster committed

May 11, 2008

  1. Brandon Casey

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

    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
    Signed-off-by: Brandon Casey <>
    Signed-off-by: Junio C Hamano <>
    drafnel authored gitster committed
  2. A Large Angry SCM

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

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

Nov 06, 2007

  1. Pierre Habouzit

    Migrate to use git-rev-parse --parseopt

    Signed-off-by: Junio C Hamano <>
    MadCoder authored gitster committed

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 authored

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
    gitster authored

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
    Signed-off-by: David Kastrup <>
    Signed-off-by: Junio C Hamano <>
    David Kastrup authored gitster committed

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 authored

Jul 12, 2007

  1. Brian Downing

    Add --window-memory option to git-repack

    Signed-off-by: Brian Downing <>
    Acked-by: Nicolas Pitre <>
    Signed-off-by: Junio C Hamano <>
    bdowning authored gitster committed

Jul 04, 2007

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

    Signed-off-by: Uwe Kleine-König <>
    Signed-off-by: Junio C Hamano <>
    Uwe Kleine-König authored gitster committed

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 authored

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 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 <>
    Signed-off-by: Junio C Hamano <>
    Dana How authored Junio C Hamano committed

May 21, 2007

  1. git-repack --max-pack-size: add option parsing to enable feature

    Add --max-pack-size parsing and usage messages.
    Upgrade to handle multiple packfile names,
    and build packfiles in GIT_OBJECT_DIRECTORY not GIT_DIR.
    Update documentation.
    Signed-off-by: Dana L. How <>
    Signed-off-by: Junio C Hamano <>
    Dana L. How authored Junio C Hamano committed
Something went wrong with that request. Please try again.