From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pete Wyckoff Subject: [PATCH 3/4] git p4: fix writable file after rename or copy Date: Sun, 29 Apr 2012 20:57:16 -0400 Message-ID: <1335747437-24034-4-git-send-email-pw@padd.com> References: <1335747437-24034-1-git-send-email-pw@padd.com> Cc: Gary Gibbons , Luke Diamand To: git@vger.kernel.org X-From: git-owner@vger.kernel.org Mon Apr 30 02:58:25 2012 Return-path: Envelope-to: gcvg-git-2@plane.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SOewa-0003ms-SO for gcvg-git-2@plane.gmane.org; Mon, 30 Apr 2012 02:58:25 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754792Ab2D3A6V (ORCPT ); Sun, 29 Apr 2012 20:58:21 -0400 Received: from honk.padd.com ([74.3.171.149]:36592 "EHLO honk.padd.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754314Ab2D3A6U (ORCPT ); Sun, 29 Apr 2012 20:58:20 -0400 Received: from arf.padd.com (unknown [50.55.155.59]) by honk.padd.com (Postfix) with ESMTPSA id DC5CF60C0; Sun, 29 Apr 2012 17:58:19 -0700 (PDT) Received: by arf.padd.com (Postfix, from userid 7770) id B4743313F8; Sun, 29 Apr 2012 20:58:17 -0400 (EDT) X-Mailer: git-send-email 1.7.10.572.ged86f In-Reply-To: <1335747437-24034-1-git-send-email-pw@padd.com> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: The way rename works is with a "p4 integrate", optionally followed by a "p4 edit" if the change is not a 100% rename. Contents are generated by applying a patch, not doing a file system rename. Copy is similar. In this case, p4 does not fix the permissions back to read-only. Make sure this happens by calling "p4 sync -f". Signed-off-by: Pete Wyckoff --- git-p4.py | 12 ++++++++++++ t/t9807-git-p4-submit.sh | 6 ++++-- t/t9809-git-p4-client-view.sh | 7 ++++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/git-p4.py b/git-p4.py index a2eba5d..888e3e7 100755 --- a/git-p4.py +++ b/git-p4.py @@ -1021,6 +1021,7 @@ class P4Submit(Command, P4UserMap): filesToAdd = set() filesToDelete = set() editedFiles = set() + pureRenameCopy = set() filesToChangeExecBit = {} for line in diff: @@ -1044,10 +1045,13 @@ class P4Submit(Command, P4UserMap): elif modifier == "C": src, dest = diff['src'], diff['dst'] p4_integrate(src, dest) + pureRenameCopy.add(dest) if diff['src_sha1'] != diff['dst_sha1']: p4_edit(dest) + pureRenameCopy.discard(dest) if isModeExecChanged(diff['src_mode'], diff['dst_mode']): p4_edit(dest) + pureRenameCopy.discard(dest) filesToChangeExecBit[dest] = diff['dst_mode'] os.unlink(dest) editedFiles.add(dest) @@ -1056,6 +1060,8 @@ class P4Submit(Command, P4UserMap): p4_integrate(src, dest) if diff['src_sha1'] != diff['dst_sha1']: p4_edit(dest) + else: + pureRenameCopy.add(dest) if isModeExecChanged(diff['src_mode'], diff['dst_mode']): p4_edit(dest) filesToChangeExecBit[dest] = diff['dst_mode'] @@ -1209,6 +1215,12 @@ class P4Submit(Command, P4UserMap): # unmarshalled. changelist = self.lastP4Changelist() self.modifyChangelistUser(changelist, p4User) + + # The rename/copy happened by applying a patch that created a + # new file. This leaves it writable, which confuses p4. + for f in pureRenameCopy: + p4_sync(f, "-f") + else: # skip this patch print "Submission cancelled, undoing p4 changes." diff --git a/t/t9807-git-p4-submit.sh b/t/t9807-git-p4-submit.sh index a2499ee..f23b4c3 100755 --- a/t/t9807-git-p4-submit.sh +++ b/t/t9807-git-p4-submit.sh @@ -158,7 +158,8 @@ test_expect_success 'submit copy' ' ) && ( cd "$cli" && - test_path_is_file file5.ta + test_path_is_file file5.ta && + test ! -w file5.ta ) ' @@ -176,7 +177,8 @@ test_expect_success 'submit rename' ' ( cd "$cli" && test_path_is_missing file6.t && - test_path_is_file file6.ta + test_path_is_file file6.ta && + test ! -w file6.ta ) ' diff --git a/t/t9809-git-p4-client-view.sh b/t/t9809-git-p4-client-view.sh index 796b02c..43ed1fe 100755 --- a/t/t9809-git-p4-client-view.sh +++ b/t/t9809-git-p4-client-view.sh @@ -349,7 +349,8 @@ test_expect_success 'subdir clone, submit copy' ' ) && ( cd "$cli" && - test_path_is_file dir1/file11a + test_path_is_file dir1/file11a && + test ! -w dir1/file11a ) ' @@ -368,14 +369,14 @@ test_expect_success 'subdir clone, submit rename' ' ( cd "$cli" && test_path_is_missing dir1/file13 && - test_path_is_file dir1/file13a + test_path_is_file dir1/file13a && + test ! -w dir1/file13a ) ' test_expect_success 'reinit depot' ' ( cd "$cli" && - p4 sync -f && rm files && p4 delete */* && p4 submit -d "delete all files" && -- 1.7.10.366.g90ade