@ -91,7 +91,7 @@ def main():
no_sha1 = True
prev_commit = " "
initial_commit = current_commit
branch = subprocess . check_output ( [ GIT , ' show ' , ' -s ' , ' --format= % H ' , initial_commit ] , universal_newlines = True , encoding = ' utf8 ' ) . splitlines ( ) [ 0 ]
branch = subprocess . check_output ( [ GIT , ' show ' , ' -s ' , ' --format= % H ' , initial_commit ] ). decode ( ' utf8 ' ) . splitlines ( ) [ 0 ]
# Iterate through commits
while True :
@ -112,7 +112,7 @@ def main():
if prev_commit != " " :
print ( " No parent of {} was signed with a trusted key! " . format ( prev_commit ) , file = sys . stderr )
print ( " Parents are: " , file = sys . stderr )
parents = subprocess . check_output ( [ GIT , ' show ' , ' -s ' , ' --format=format: % P ' , prev_commit ] , universal_newlines = True , encoding = ' utf8 ' ) . splitlines ( ) [ 0 ] . split ( ' ' )
parents = subprocess . check_output ( [ GIT , ' show ' , ' -s ' , ' --format=format: % P ' , prev_commit ] ). decode ( ' utf8 ' ) . splitlines ( ) [ 0 ] . split ( ' ' )
for parent in parents :
subprocess . call ( [ GIT , ' show ' , ' -s ' , parent ] , stdout = sys . stderr )
else :
@ -122,25 +122,25 @@ def main():
# Check the Tree-SHA512
if ( verify_tree or prev_commit == " " ) and current_commit not in incorrect_sha512_allowed :
tree_hash = tree_sha512sum ( current_commit )
if ( " Tree-SHA512: {} " . format ( tree_hash ) ) not in subprocess . check_output ( [ GIT , ' show ' , ' -s ' , ' --format=format: % B ' , current_commit ] , universal_newlines = True , encoding = ' utf8 ' ) . splitlines ( ) :
if ( " Tree-SHA512: {} " . format ( tree_hash ) ) not in subprocess . check_output ( [ GIT , ' show ' , ' -s ' , ' --format=format: % B ' , current_commit ] ). decode ( ' utf8 ' ) . splitlines ( ) :
print ( " Tree-SHA512 did not match for commit " + current_commit , file = sys . stderr )
sys . exit ( 1 )
# Merge commits should only have two parents
parents = subprocess . check_output ( [ GIT , ' show ' , ' -s ' , ' --format=format: % P ' , current_commit ] , universal_newlines = True , encoding = ' utf8 ' ) . splitlines ( ) [ 0 ] . split ( ' ' )
parents = subprocess . check_output ( [ GIT , ' show ' , ' -s ' , ' --format=format: % P ' , current_commit ] ). decode ( ' utf8 ' ) . splitlines ( ) [ 0 ] . split ( ' ' )
if len ( parents ) > 2 :
print ( " Commit {} is an octopus merge " . format ( current_commit ) , file = sys . stderr )
sys . exit ( 1 )
# Check that the merge commit is clean
commit_time = int ( subprocess . check_output ( [ GIT , ' show ' , ' -s ' , ' --format=format: %c t ' , current_commit ] , universal_newlines = True , encoding = ' utf8 ' ) . splitlines ( ) [ 0 ] )
commit_time = int ( subprocess . check_output ( [ GIT , ' show ' , ' -s ' , ' --format=format: %c t ' , current_commit ] ). decode ( ' utf8 ' ) . splitlines ( ) [ 0 ] )
check_merge = commit_time > time . time ( ) - args . clean_merge * 24 * 60 * 60 # Only check commits in clean_merge days
allow_unclean = current_commit in unclean_merge_allowed
if len ( parents ) == 2 and check_merge and not allow_unclean :
current_tree = subprocess . check_output ( [ GIT , ' show ' , ' --format= % T ' , current_commit ] , universal_newlines = True , encoding = ' utf8 ' ) . splitlines ( ) [ 0 ]
current_tree = subprocess . check_output ( [ GIT , ' show ' , ' --format= % T ' , current_commit ] ). decode ( ' utf8 ' ) . splitlines ( ) [ 0 ]
subprocess . call ( [ GIT , ' checkout ' , ' --force ' , ' --quiet ' , parents [ 0 ] ] )
subprocess . call ( [ GIT , ' merge ' , ' --no-ff ' , ' --quiet ' , ' --no-gpg-sign ' , parents [ 1 ] ] , stdout = subprocess . DEVNULL )
recreated_tree = subprocess . check_output ( [ GIT , ' show ' , ' --format=format: % T ' , ' HEAD ' ] , universal_newlines = True , encoding = ' utf8 ' ) . splitlines ( ) [ 0 ]
recreated_tree = subprocess . check_output ( [ GIT , ' show ' , ' --format=format: % T ' , ' HEAD ' ] ). decode ( ' utf8 ' ) . splitlines ( ) [ 0 ]
if current_tree != recreated_tree :
print ( " Merge commit {} is not clean " . format ( current_commit ) , file = sys . stderr )
subprocess . call ( [ GIT , ' diff ' , current_commit ] )