Merge branch 'jd/p4-jobs-in-commit'

"git p4" learned to record P4 jobs in Git commit that imports from
the history in Perforce.

* jd/p4-jobs-in-commit:
  git-p4: add P4 jobs to git commit message
  git-p4: clean-up code style in tests
This commit is contained in:
Junio C Hamano 2016-05-03 14:08:12 -07:00
commit e61f75fe19
4 changed files with 162 additions and 42 deletions

View File

@ -2320,6 +2320,15 @@ class P4Sync(Command, P4UserMap):
fnum = fnum + 1 fnum = fnum + 1
return files return files
def extractJobsFromCommit(self, commit):
jobs = []
jnum = 0
while commit.has_key("job%s" % jnum):
job = commit["job%s" % jnum]
jobs.append(job)
jnum = jnum + 1
return jobs
def stripRepoPath(self, path, prefixes): def stripRepoPath(self, path, prefixes):
"""When streaming files, this is called to map a p4 depot path """When streaming files, this is called to map a p4 depot path
to where it should go in git. The prefixes are either to where it should go in git. The prefixes are either
@ -2665,6 +2674,7 @@ class P4Sync(Command, P4UserMap):
def commit(self, details, files, branch, parent = ""): def commit(self, details, files, branch, parent = ""):
epoch = details["time"] epoch = details["time"]
author = details["user"] author = details["user"]
jobs = self.extractJobsFromCommit(details)
if self.verbose: if self.verbose:
print('commit into {0}'.format(branch)) print('commit into {0}'.format(branch))
@ -2692,6 +2702,8 @@ class P4Sync(Command, P4UserMap):
self.gitStream.write("data <<EOT\n") self.gitStream.write("data <<EOT\n")
self.gitStream.write(details["desc"]) self.gitStream.write(details["desc"])
if len(jobs) > 0:
self.gitStream.write("\nJobs: %s" % (' '.join(jobs)))
self.gitStream.write("\n[git-p4: depot-paths = \"%s\": change = %s" % self.gitStream.write("\n[git-p4: depot-paths = \"%s\": change = %s" %
(','.join(self.branchPrefixes), details["change"])) (','.join(self.branchPrefixes), details["change"]))
if len(details['options']) > 0: if len(details['options']) > 0:

View File

@ -160,6 +160,15 @@ p4_add_user() {
EOF EOF
} }
p4_add_job () {
p4 job -f -i <<-EOF
Job: $1
Status: open
User: dummy
Description:
EOF
}
retry_until_success () { retry_until_success () {
timeout=$(($(time_in_seconds) + $RETRY_TIMEOUT)) timeout=$(($(time_in_seconds) + $RETRY_TIMEOUT))
until "$@" 2>/dev/null || test $(time_in_seconds) -gt $timeout until "$@" 2>/dev/null || test $(time_in_seconds) -gt $timeout

99
t/t9829-git-p4-jobs.sh Executable file
View File

@ -0,0 +1,99 @@
#!/bin/sh
test_description='git p4 retrieve job info'
. ./lib-git-p4.sh
test_expect_success 'start p4d' '
start_p4d
'
test_expect_success 'add p4 jobs' '
(
p4_add_job TESTJOB-A &&
p4_add_job TESTJOB-B
)
'
test_expect_success 'add p4 files' '
client_view "//depot/... //client/..." &&
(
cd "$cli" &&
>file1 &&
p4 add file1 &&
p4 submit -d "Add file 1"
)
'
test_expect_success 'check log message of changelist with no jobs' '
client_view "//depot/... //client/..." &&
test_when_finished cleanup_git &&
(
cd "$git" &&
git init . &&
git p4 clone --use-client-spec --destination="$git" //depot@all &&
cat >expect <<-\EOF &&
Add file 1
[git-p4: depot-paths = "//depot/": change = 1]
EOF
git log --format=%B >actual &&
test_cmp expect actual
)
'
test_expect_success 'add TESTJOB-A to change 1' '
(
cd "$cli" &&
p4 fix -c 1 TESTJOB-A
)
'
test_expect_success 'check log message of changelist with one job' '
client_view "//depot/... //client/..." &&
test_when_finished cleanup_git &&
(
cd "$git" &&
git init . &&
git p4 clone --use-client-spec --destination="$git" //depot@all &&
cat >expect <<-\EOF &&
Add file 1
Jobs: TESTJOB-A
[git-p4: depot-paths = "//depot/": change = 1]
EOF
git log --format=%B >actual &&
test_cmp expect actual
)
'
test_expect_success 'add TESTJOB-B to change 1' '
(
cd "$cli" &&
p4 fix -c 1 TESTJOB-B
)
'
test_expect_success 'check log message of changelist with more jobs' '
client_view "//depot/... //client/..." &&
test_when_finished cleanup_git &&
(
cd "$git" &&
git init . &&
git p4 clone --use-client-spec --destination="$git" //depot@all &&
cat >expect <<-\EOF &&
Add file 1
Jobs: TESTJOB-A TESTJOB-B
[git-p4: depot-paths = "//depot/": change = 1]
EOF
git log --format=%B >actual &&
test_cmp expect actual
)
'
test_expect_success 'kill p4d' '
kill_p4d
'
test_done