Vous ne pouvez pas faire ça. Au moment où les hooks de pré-réception et de mise à jour sont exécutés, le pack (toutes les données) a déjà été reçu. Tout ce qui reste à faire est de mettre à jour les références, et c'est ce que le hook vous permet d'interrompre. Extrait de la page de manuel :
Juste avant de commencer à mettre à jour les références sur le référentiel distant, le hook de pré-réception est invoqué.
Et il y a une déclaration identique concernant le crochet de mise à jour.
Je ne suis même pas sûr que, pour un mécanisme de transport général, même git receive-pack
connaît la taille finale de tout ce qu'il va recevoir.
Mais quel problème essayez-vous de résoudre ? Éviter aux utilisateurs des poussées fastidieuses ? (Ils peuvent les annuler eux-mêmes ; c'est assez évident du côté de l'utilisateur.) Maîtriser l'espace disque sur la télécommande ? Dans la plupart des cas, vous pouvez probablement limiter l'accès aux utilisateurs dont vous pouvez être sûr qu'ils ne vont pas tout gâcher, et traiter les exceptions manuellement.
Si vous devez absolument le faire, la seule façon de le faire est d'envelopper le push du côté de l'utilisateur, de sorte qu'il exécute my-push
qui, d'une manière ou d'une autre, estime la taille de ce qu'ils sont sur le point de pousser, et décide de le pousser ou non - mais on en revient alors à faire confiance aux utilisateurs, puisque s'ils n'utilisent pas ce wrapper, ils peuvent pousser ce qu'ils veulent.