Merge branch 'eg/p4-submit-catch-failure' into maint

Just like the working tree is cleaned up when the user cancelled
submission in P4Submit.applyCommit(), clean up the mess if "p4
submit" fails.

* eg/p4-submit-catch-failure:
  git-p4: clean up after p4 submit failure
This commit is contained in:
Jeff King
2015-12-01 17:24:20 -05:00
2 changed files with 36 additions and 33 deletions

View File

@ -1543,44 +1543,47 @@ class P4Submit(Command, P4UserMap):
# #
# Let the user edit the change description, then submit it. # Let the user edit the change description, then submit it.
# #
if self.edit_template(fileName): submitted = False
# read the edited message and submit
ret = True
tmpFile = open(fileName, "rb")
message = tmpFile.read()
tmpFile.close()
if self.isWindows:
message = message.replace("\r\n", "\n")
submitTemplate = message[:message.index(separatorLine)]
p4_write_pipe(['submit', '-i'], submitTemplate)
if self.preserveUser: try:
if p4User: if self.edit_template(fileName):
# Get last changelist number. Cannot easily get it from # read the edited message and submit
# the submit command output as the output is tmpFile = open(fileName, "rb")
# unmarshalled. message = tmpFile.read()
changelist = self.lastP4Changelist() tmpFile.close()
self.modifyChangelistUser(changelist, p4User) if self.isWindows:
message = message.replace("\r\n", "\n")
submitTemplate = message[:message.index(separatorLine)]
p4_write_pipe(['submit', '-i'], submitTemplate)
# The rename/copy happened by applying a patch that created a if self.preserveUser:
# new file. This leaves it writable, which confuses p4. if p4User:
for f in pureRenameCopy: # Get last changelist number. Cannot easily get it from
p4_sync(f, "-f") # the submit command output as the output is
# unmarshalled.
changelist = self.lastP4Changelist()
self.modifyChangelistUser(changelist, p4User)
else: # 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")
submitted = True
finally:
# skip this patch # skip this patch
ret = False if not submitted:
print "Submission cancelled, undoing p4 changes." print "Submission cancelled, undoing p4 changes."
for f in editedFiles: for f in editedFiles:
p4_revert(f) p4_revert(f)
for f in filesToAdd: for f in filesToAdd:
p4_revert(f) p4_revert(f)
os.remove(f) os.remove(f)
for f in filesToDelete: for f in filesToDelete:
p4_revert(f) p4_revert(f)
os.remove(fileName) os.remove(fileName)
return ret return submitted
# Export git tags as p4 labels. Create a p4 label and then tag # Export git tags as p4 labels. Create a p4 label and then tag
# with that. # with that.

View File

@ -389,7 +389,7 @@ test_expect_success 'description with Jobs section and bogus following text' '
( (
cd "$cli" && cd "$cli" &&
p4 revert desc6 && p4 revert desc6 &&
rm desc6 rm -f desc6
) )
' '