git-p4: Do not include diff in spec file when just preparing p4
The diff information render the spec file unusable as is by p4, do not include it when run with --prepare-p4-only so that the given file can be directly passed to p4. With --prepare-p4-only, git-p4 already tells the user it can use p4 submit with the generated spec file. This fails because of the diff being present in the file. Not including the diff fixes that. Without --prepare-p4-only, keeping the diff makes sense for a quick review of the patch before submitting it. And does not cause problems with p4 as we remove it programmatically. Signed-off-by: Maxime Coste <frrrwww@gmail.com> Acked-by: Pete Wyckoff <pw@padd.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
4a28f169ad
commit
b4073bb387
49
git-p4.py
49
git-p4.py
@ -1238,6 +1238,28 @@ class P4Submit(Command, P4UserMap):
|
|||||||
if response == 'n':
|
if response == 'n':
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def get_diff_description(self, editedFiles):
|
||||||
|
# diff
|
||||||
|
if os.environ.has_key("P4DIFF"):
|
||||||
|
del(os.environ["P4DIFF"])
|
||||||
|
diff = ""
|
||||||
|
for editedFile in editedFiles:
|
||||||
|
diff += p4_read_pipe(['diff', '-du',
|
||||||
|
wildcard_encode(editedFile)])
|
||||||
|
|
||||||
|
# new file diff
|
||||||
|
newdiff = ""
|
||||||
|
for newFile in filesToAdd:
|
||||||
|
newdiff += "==== new file ====\n"
|
||||||
|
newdiff += "--- /dev/null\n"
|
||||||
|
newdiff += "+++ %s\n" % newFile
|
||||||
|
f = open(newFile, "r")
|
||||||
|
for line in f.readlines():
|
||||||
|
newdiff += "+" + line
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
return diff + newdiff
|
||||||
|
|
||||||
def applyCommit(self, id):
|
def applyCommit(self, id):
|
||||||
"""Apply one commit, return True if it succeeded."""
|
"""Apply one commit, return True if it succeeded."""
|
||||||
|
|
||||||
@ -1398,34 +1420,15 @@ class P4Submit(Command, P4UserMap):
|
|||||||
submitTemplate += "######## Variable git-p4.skipUserNameCheck hides this message.\n"
|
submitTemplate += "######## Variable git-p4.skipUserNameCheck hides this message.\n"
|
||||||
|
|
||||||
separatorLine = "######## everything below this line is just the diff #######\n"
|
separatorLine = "######## everything below this line is just the diff #######\n"
|
||||||
|
if not self.prepare_p4_only:
|
||||||
|
submitTemplate += separatorLine
|
||||||
|
submitTemplate += self.get_diff_description(editedFiles)
|
||||||
|
|
||||||
# diff
|
|
||||||
if os.environ.has_key("P4DIFF"):
|
|
||||||
del(os.environ["P4DIFF"])
|
|
||||||
diff = ""
|
|
||||||
for editedFile in editedFiles:
|
|
||||||
diff += p4_read_pipe(['diff', '-du',
|
|
||||||
wildcard_encode(editedFile)])
|
|
||||||
|
|
||||||
# new file diff
|
|
||||||
newdiff = ""
|
|
||||||
for newFile in filesToAdd:
|
|
||||||
newdiff += "==== new file ====\n"
|
|
||||||
newdiff += "--- /dev/null\n"
|
|
||||||
newdiff += "+++ %s\n" % newFile
|
|
||||||
f = open(newFile, "r")
|
|
||||||
for line in f.readlines():
|
|
||||||
newdiff += "+" + line
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
# change description file: submitTemplate, separatorLine, diff, newdiff
|
|
||||||
(handle, fileName) = tempfile.mkstemp()
|
(handle, fileName) = tempfile.mkstemp()
|
||||||
tmpFile = os.fdopen(handle, "w+")
|
tmpFile = os.fdopen(handle, "w+")
|
||||||
if self.isWindows:
|
if self.isWindows:
|
||||||
submitTemplate = submitTemplate.replace("\n", "\r\n")
|
submitTemplate = submitTemplate.replace("\n", "\r\n")
|
||||||
separatorLine = separatorLine.replace("\n", "\r\n")
|
tmpFile.write(submitTemplate)
|
||||||
newdiff = newdiff.replace("\n", "\r\n")
|
|
||||||
tmpFile.write(submitTemplate + separatorLine + diff + newdiff)
|
|
||||||
tmpFile.close()
|
tmpFile.close()
|
||||||
|
|
||||||
if self.prepare_p4_only:
|
if self.prepare_p4_only:
|
||||||
|
@ -403,7 +403,8 @@ test_expect_success 'submit --prepare-p4-only' '
|
|||||||
git commit -m "prep only add" &&
|
git commit -m "prep only add" &&
|
||||||
git p4 submit --prepare-p4-only >out &&
|
git p4 submit --prepare-p4-only >out &&
|
||||||
test_i18ngrep "prepared for submission" out &&
|
test_i18ngrep "prepared for submission" out &&
|
||||||
test_i18ngrep "must be deleted" out
|
test_i18ngrep "must be deleted" out &&
|
||||||
|
! test_i18ngrep "everything below this line is just the diff" out
|
||||||
) &&
|
) &&
|
||||||
(
|
(
|
||||||
cd "$cli" &&
|
cd "$cli" &&
|
||||||
|
Loading…
Reference in New Issue
Block a user