overcommit --run reports success when Git cannot read the index
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 62/100
Piste de recherche
Commence dans GitRepo.all_files, qui exécute deux commandes git ls-files avec des backticks non vérifiés, et compare-la avec GitRepo.list_files, qui vérifie déjà le résultat de la commande et lève une erreur Overcommit. Vérifie les deux résultats d'énumération et échoue avec un statut non nul lorsque Git ne peut pas lire l'index. C'est terminé lorsqu'un index corrompu produit une sortie non nulle, tandis qu'un index valide vide, une violation normale et les fichiers suivis supprimés se comportent comme auparavant. La question du périmètre reste ouverte pour un mainteneur.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Reproduced separately on main 50f3e866bef75e3c3be7f92b47b1c45b6e7436ba (0.74.0), macOS 15.6.1, Ruby 4.0.7, Apple Git 2.50.1.
GitRepo.all_files does not check the exit status of either git ls-files command. If Git cannot read the index, both commands fail, but their empty stdout is treated as a valid empty file list. In a scratch repository with a configured TrailingWhitespace hook, the CLI prints Git's fatal errors followed by All pre-commit hooks passed, and exits 0.
Reproduction
- In a new disposable repository, configure only TrailingWhitespace with
include: ['**/*.rb']andon_warn: fail, and approve the fixture configuration withovercommit --sign. - Create and stage
normal.rbcontaining a trailing-space violation. Confirmovercommit --runexits 65. - Replace only that disposable repository's
.git/indexwith invalid synthetic bytes. No user repository or live index is needed. - Run
overcommit --runagain.
Observed stderr:
fatal: .git/index: index file smaller than expected
fatal: .git/index: index file smaller than expected
Observed stdout ends with:
All pre-commit hooks passed
Exit status is 0. A valid empty index also exits 0, so callers cannot distinguish the two states using the process status.
Expected behavior and scope question
When Git cannot enumerate the files to check, --run should report an enumeration error and return a nonzero status rather than success. GitRepo.list_files already checks command success and raises an Overcommit error; all_files currently uses unchecked backticks.
I checked #524: it concerned restoring the working tree/stash after normal pre-commit execution and did not provide a reproducible cause of index corruption. This report neither attributes index corruption to Overcommit nor asks it to repair a broken index. It is specifically about the standalone --run exit status once enumeration fails.
Would a separate change checking both enumeration command results be in scope? The controls would cover a valid empty index, normal violation, deleted tracked files, and Git enumeration failure. I would not combine it with filename parsing, stash handling, or index recovery.
- Langage dominant
- Ruby
- Étoiles
- 4k
- Forks
- 288
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 18
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de sds/overcommit
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 78/100
sds/overcommit#847 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 Une demi-journée Accessibilité débutants 62/100
sds/overcommit#908 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
sds/overcommit#875 ·
Les mainteneurs répondent en général sous 1 jour
-
help wanted
Difficulté 4/5 3-5 jours Accessibilité débutants 18/100
sds/overcommit#869 ·
Les mainteneurs répondent en général sous 1 jour
-
Please remove the default hooksOuverte
Difficulté 3/5 Une demi-journée Accessibilité débutants 25/100
sds/overcommit#856 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de sds/overcommit
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
seek4science/seek#2784 ·
Les mainteneurs répondent en général sous 2 jours
-
Translation tutorial: snippet crashes on chunks export and misses simple { t } entriesPeut-être pris @Mahdi-Hasan l’a pris aujourd’hui. Ouverteresource-documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
TarteelAI/quranic-universal-library#1020 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Records without the CRI logtag raise NoMethodError and are joined into the next recordPeut-être pris @nazarli-shabnam l’a pris aujourd’hui. Ouvertebug help wanted
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
swombat/souls-house#842 ·
Les mainteneurs répondent en général sous 1 jour