Одна из вещей, которые я держу в своем open novel in GitHub, - это list of words. Я бы хотел установить автоматически первую строку, которая представляет собой количество слов в словаре. Мой первый вариант - написать крюк предварительной фиксации, который читает файл, подсчитывает слова, переписывает первую строку и записывает ее снова. Вот кодМожете ли вы изменить содержимое файла во время git commit?
PRE_COMMIT {
my ($git) = @_;
my $branch = $git->command(qw/rev-parse --abbrev-ref HEAD/);
say "Pre-commit hook in $branch";
if ($branch =~ /master/) {
my $changed = $git->command(qw/show --name-status/);
my @changed_files = ($changed =~ /\s\w\s+(\S+)/g);
if ($words ~~ @changed_files) {
my @words_content = read_file($words);
say "I have $#words_content words";
$words_content[0] = "$#words_content\n";
write_file($words, @words_content);
}
}
};
Однако, так как файл уже был поставлен, я получаю эту ошибку
error: Your local changes to the following files would be overwritten by checkout: text/words.dic Please, commit your changes or stash them before you can switch branches. Aborting
Может это лучше сделать это как после совершения крючка и он изменился за следующий коммит? Или вообще что-то совершенно другое? Общий вопрос: если вы хотите обработать и изменить содержимое файла во время фиксации, каков его правильный способ?
Так в основном это другой ребенок взлома, не так ли? Выполняя это мой путь, файл изменяется, но не фиксируется до следующего – jjmerelo
Да.Я не уверен, что я был бы очень доволен любым подходом; Я бы предпочел что-то вроде Makefile, чтобы обновлять вещи по мере необходимости, и что-то более ручное. Но это должно сработать. – torek
Может быть, сделать это после коммита будет более правильным? – jjmerelo