From patchwork Wed Jan 12 15:54:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Martin_Li=C5=A1ka?= X-Patchwork-Id: 49924 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id ADE403940038 for ; Wed, 12 Jan 2022 15:55:12 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by sourceware.org (Postfix) with ESMTPS id 097BE3857C5C; Wed, 12 Jan 2022 15:54:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 097BE3857C5C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.cz Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id DCA80218E4; Wed, 12 Jan 2022 15:54:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1642002886; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=EmFGwego0i16QkxUrTf9jIEmUFFAahHADxQegAOjlss=; b=ZtILem4jn3qylKiN3Mgyn8zkKw3DKcGvVF/oWM3xRHBSJK+1H7VpTvoRnYgsbH9mbIb9HH vc9Ik//RSrsP1pF5WyG1ye3ZKKwLDKrI+gOMBeHJxZ25/DwA+pdLoFncGNI8Cl3wkxr/Ca yRAbGNEAL9940gnOzLLIGjZPMVSdOG0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1642002886; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=EmFGwego0i16QkxUrTf9jIEmUFFAahHADxQegAOjlss=; b=PA84spzqohgV9IMAzMSmfo8yavG7AO5iOJVEAjGBX27cSWEst/EJ8uQ82VgNLky6i24xnD PURN0gpZm9VVlYDg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id BCB9213B75; Wed, 12 Jan 2022 15:54:46 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id +OgTK8b53mGmMwAAMHmgww (envelope-from ); Wed, 12 Jan 2022 15:54:46 +0000 Message-ID: <486de71c-d1fc-5ca7-4036-59462a75f116@suse.cz> Date: Wed, 12 Jan 2022 16:54:46 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH] git-backport: support renamed .cc files in commit message. Content-Language: en-US From: =?utf-8?q?Martin_Li=C5=A1ka?= To: Jakub Jelinek References: <57564370-7184-ef62-039e-60b150058fd8@suse.cz> <68946bf6-4b2f-b8f3-20b3-5cf3f2fd611c@moene.org> <713a96b5-b82e-ffd7-d03b-7e05a4dede9e@suse.cz> <20220111155657.GA2646553@tucnak> <8a3f6503-7380-13bb-5731-18ff5474f68a@suse.cz> <20220111161636.GB2646553@tucnak> <78c91bbb-34d7-36f6-0d69-d8a4e7f446f5@suse.cz> In-Reply-To: <78c91bbb-34d7-36f6-0d69-d8a4e7f446f5@suse.cz> X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: GCC Mailing List , GCC Patches , gfortran Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hi. There's a patch that enhances git-backport so that it updates commit messages for files which name ends now with .cc and is still .c on a branch. Example usage: $ git show test commit 8ed4b2cb9aa158c0ef418fd1ac66271664904604 (test) Author: Martin Liska Date: Wed Jan 12 16:08:13 2022 +0100 Fix file. gcc/ChangeLog: * ipa-icf.cc: Test me. gcc/ada/ChangeLog: * cal.c: aaa. libcpp/ChangeLog: * expr.cc: aaa. $ git gcc-backport test Auto-merging gcc/ada/cal.c Auto-merging gcc/ipa-icf.c Auto-merging libcpp/expr.c [test2 ee40feb077e] Fix file. Date: Wed Jan 12 16:08:13 2022 +0100 3 files changed, 3 insertions(+) Commit message updated: 2 .cc file(s) changed. $ git show test2 commit f59a1e736c1b68f07d83388a994df8d043e8aa6e (test2) Author: Martin Liska Date: Wed Jan 12 16:08:13 2022 +0100 Fix file. gcc/ChangeLog: * ipa-icf.c: Test me. gcc/ada/ChangeLog: * cal.c: aaa. libcpp/ChangeLog: * expr.c: aaa. (cherry picked from commit 8ed4b2cb9aa158c0ef418fd1ac66271664904604) Martin From 647a6dbaf8cde4ee07b95c4530a03f7774500914 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Wed, 12 Jan 2022 16:35:41 +0100 Subject: [PATCH] git-backport: support renamed .cc files in commit message. The change can automatically update names for *.cc files that are part of a backport. contrib/ChangeLog: * git-backport.py: Support renaming of .cc files. --- contrib/git-backport.py | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/contrib/git-backport.py b/contrib/git-backport.py index 2b8e4686719..627bbd9ee66 100755 --- a/contrib/git-backport.py +++ b/contrib/git-backport.py @@ -20,7 +20,32 @@ # Boston, MA 02110-1301, USA. import argparse +import os import subprocess +import sys +import tempfile + +script_folder = os.path.dirname(os.path.abspath(__file__)) +verify_script = os.path.join(script_folder, + 'gcc-changelog/git_check_commit.py') + + +def replace_file_in_changelog(lines, filename): + if not filename.endswith('.cc'): + return + + # consider all componenets of a path: gcc/ipa-icf.cc + while filename: + for i, line in enumerate(lines): + if filename in line: + line = line.replace(filename, filename[:-1]) + lines[i] = line + return + parts = filename.split('/') + if len(parts) == 1: + return + filename = '/'.join(parts[1:]) + if __name__ == '__main__': parser = argparse.ArgumentParser(description='Backport a git revision and ' @@ -63,3 +88,28 @@ if __name__ == '__main__': subprocess.check_output(cmd, shell=True) else: print('Please resolve all remaining file conflicts.') + sys.exit(1) + + # Update commit message if change for a .cc file was taken + r = subprocess.run(f'{verify_script} HEAD', shell=True, encoding='utf8', + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if r.returncode != 0: + lines = r.stdout.splitlines() + cmd = 'git show -s --format=%B' + commit_message = subprocess.check_output(cmd, shell=True, + encoding='utf8').strip() + commit_message = commit_message.splitlines() + + todo = [line for line in lines if 'unchanged file mentioned' in line] + for item in todo: + filename = item.split()[-1].strip('"') + replace_file_in_changelog(commit_message, filename) + + with tempfile.NamedTemporaryFile('w', encoding='utf8', + delete=False) as w: + w.write('\n'.join(commit_message)) + w.close() + subprocess.check_output(f'git commit --amend -F {w.name}', + shell=True, encoding='utf8') + os.unlink(w.name) + print(f'Commit message updated: {len(todo)} .cc file(s) changed.') -- 2.34.1