git pre-auto-gc hook вообще не вызывается - PullRequest
0 голосов
/ 08 августа 2010

Я хотел бы использовать git pre-auto-gc hook , но, похоже, он вообще не вызывается.

Файл исполняемый, и я протестировал его с помощью git1.7.1 и 1.5.6.5, кажется, что ни один из них не работает должным образом (они не вызывают сценарий при запуске git gc --auto).

Кто-нибудь из вас что-нибудь знает об этом?Может быть, мне нужно настроить что-то в конфигурации, чтобы git знал об этом хуке?

Я попытался немного погуглить, но ничего не нашел ...

Спасибо :-).

1 Ответ

0 голосов
/ 08 августа 2010

Хорошо, у меня может быть ответ.

В исходном коде git gc.c я вижу, что ловушка запускается в функции need_to_gc, которая имеет два способа сжать ее ...

static int need_to_gc(void)
{
  /*
   * Setting gc.auto to 0 or negative can disable the
   * automatic gc.
   */
  if (gc_auto_threshold <= 0)
    return 0;

  /*
   * If there are too many loose objects, but not too many
   * packs, we run "repack -d -l".  If there are too many packs,
   * we run "repack -A -d -l".  Otherwise we tell the caller
   * there is no need.
   */
  if (too_many_packs())
    append_option(argv_repack,
                  prune_expire && !strcmp(prune_expire, "now") ?
                  "-a" : "-A",
                  MAX_ADD);
  else if (!too_many_loose_objects())
    return 0;

  if (run_hook(NULL, "pre-auto-gc", NULL))
    return 0;
  return 1;
}

IMO первое короткое замыкание (если gc.auto установлено в 0) в порядке. Но второе не должно препятствовать запуску хуков, возможно, ему следует передать логический аргумент, говорящий, если да или нет, нужен gc. Потому что в настоящее время разочаровывает, что крюк не запускается, когда вы этого хотите.

И кстати, я обнаружил исходный код git, действительно приятно читать такой чистый код!

РЕДАКТИРОВАТЬ: Я снова протестировал ловушку на некоторых старых и довольно больших репозиториях, и gc никогда не вызывался, когда была предоставлена ​​опция --auto. Значение по умолчанию auto_threshold (которое, очевидно, равно 27) может быть слишком высоким или, возможно, gc необходим только в экстремальных ситуациях.

Во всяком случае, меня раздражает, что этот хук не вызывается, так много для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...