git p4: fix-up "import/export of labels to/from p4"

The previous one is already in 'next' but was somewhat lacking.

The configuration "git-p4.validLabelRegexp" is now called
"labelExportRegexp", and its default covers lowercase alphabets as
well.

Signed-off-by: Luke Diamand <luke@diamand.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Luke Diamand 2012-04-11 17:21:24 +02:00 committed by Junio C Hamano
parent 06804c76e8
commit c8942a223d
3 changed files with 23 additions and 25 deletions

View File

@ -267,7 +267,7 @@ These options can be used to modify 'git p4 submit' behavior.
Re-author p4 changes before submitting to p4. This option Re-author p4 changes before submitting to p4. This option
requires p4 admin privileges. requires p4 admin privileges.


--export-labels: --export-labels::
Export tags from git as p4 labels. Tags found in git are applied Export tags from git as p4 labels. Tags found in git are applied
to the perforce working directory. to the perforce working directory.


@ -442,6 +442,11 @@ git-p4.branchList::
by a colon (:). This example declares that both branchA and by a colon (:). This example declares that both branchA and
branchB were created from main: branchB were created from main:


-------------
git config git-p4.branchList main:branchA
git config --add git-p4.branchList main:branchB
-------------

git-p4.ignoredP4Labels:: git-p4.ignoredP4Labels::
List of p4 labels to ignore. This is built automatically as List of p4 labels to ignore. This is built automatically as
unimportable labels are discovered. unimportable labels are discovered.
@ -449,14 +454,9 @@ git-p4.ignoredP4Labels::
git-p4.importLabels:: git-p4.importLabels::
Import p4 labels into git, as per --import-labels. Import p4 labels into git, as per --import-labels.


git-p4.validLabelRegexp:: git-p4.labelImportRegexp::
Only p4 labels matching this regular expression will be imported. The Only p4 labels matching this regular expression will be imported. The
default value is '[A-Z0-9_\-.]+$'. default value is '[a-zA-Z0-9_\-.]+$'.

-------------
git config git-p4.branchList main:branchA
git config --add git-p4.branchList main:branchB
-------------


git-p4.useClientSpec:: git-p4.useClientSpec::
Specify that the p4 client spec should be used to identify p4 Specify that the p4 client spec should be used to identify p4
@ -515,9 +515,9 @@ git-p4.attemptRCSCleanup:
git-p4.exportLabels:: git-p4.exportLabels::
Export git tags to p4 labels, as per --export-labels. Export git tags to p4 labels, as per --export-labels.


git-p4.validLabelRegexp:: git-p4.labelExportRegexp::
Only p4 labels matching this regular expression will be exported. The Only p4 labels matching this regular expression will be exported. The
default value is '[A-Z0-9_\-.]+$'. default value is '[a-zA-Z0-9_\-.]+$'.


IMPLEMENTATION DETAILS IMPLEMENTATION DETAILS
---------------------- ----------------------

View File

@ -15,7 +15,7 @@ import re, shutil
verbose = False verbose = False


# Only labels/tags matching this will be imported/exported # Only labels/tags matching this will be imported/exported
defaultLabelRegexp = r'[A-Z0-9_\-.]+$' defaultLabelRegexp = r'[a-zA-Z0-9_\-.]+$'


def p4_build_cmd(cmd): def p4_build_cmd(cmd):
"""Build a suitable p4 command line. """Build a suitable p4 command line.
@ -1255,11 +1255,10 @@ class P4Submit(Command, P4UserMap):
# 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.
def exportGitTags(self, gitTags): def exportGitTags(self, gitTags):
validTagRegexp = gitConfig("git-p4.validTagRegexp") validLabelRegexp = gitConfig("git-p4.labelExportRegexp")
if len(validTagRegexp) == 0: if len(validLabelRegexp) == 0:
validTagRegexp = defaultLabelRegexp validLabelRegexp = defaultLabelRegexp
m = re.compile(validTagRegexp) m = re.compile(validLabelRegexp)
commit_re = re.compile(r'\s*\[git-p4:.*change = (\d+)\s*\]')


for name in gitTags: for name in gitTags:


@ -1269,17 +1268,16 @@ class P4Submit(Command, P4UserMap):
continue continue


# Get the p4 commit this corresponds to # Get the p4 commit this corresponds to
changelist = None logMessage = extractLogMessageFromGitCommit(name)
for l in read_pipe_lines(["git", "log", "--max-count=1", name]): values = extractSettingsGitLog(logMessage)
match = commit_re.match(l)
if match:
changelist = match.group(1)


if not changelist: if not values.has_key('change'):
# a tag pointing to something not sent to p4; ignore # a tag pointing to something not sent to p4; ignore
if verbose: if verbose:
print "git tag %s does not give a p4 commit" % name print "git tag %s does not give a p4 commit" % name
continue continue
else:
changelist = values['change']


# Get the tag details. # Get the tag details.
inHeader = True inHeader = True
@ -2076,7 +2074,7 @@ class P4Sync(Command, P4UserMap):
print "import p4 labels: " + ' '.join(p4Labels) print "import p4 labels: " + ' '.join(p4Labels)


ignoredP4Labels = gitConfigList("git-p4.ignoredP4Labels") ignoredP4Labels = gitConfigList("git-p4.ignoredP4Labels")
validLabelRegexp = gitConfig("git-p4.validLabelRegexp") validLabelRegexp = gitConfig("git-p4.labelImportRegexp")
if len(validLabelRegexp) == 0: if len(validLabelRegexp) == 0:
validLabelRegexp = defaultLabelRegexp validLabelRegexp = defaultLabelRegexp
m = re.compile(validLabelRegexp) m = re.compile(validLabelRegexp)

View File

@ -30,7 +30,7 @@ test_expect_success 'basic p4 labels' '


p4 tag -l TAG_F1_ONLY main/f1 && p4 tag -l TAG_F1_ONLY main/f1 &&
p4 tag -l TAG_WITH\$_SHELL_CHAR main/... && p4 tag -l TAG_WITH\$_SHELL_CHAR main/... &&
p4 tag -l this_tag_will_be_skipped main/... && p4 tag -l this_tag_will_be\ skipped main/... &&


echo f4 >main/f4 && echo f4 >main/f4 &&
p4 add main/f4 && p4 add main/f4 &&
@ -50,7 +50,7 @@ test_expect_success 'basic p4 labels' '


git p4 clone --dest="$git" //depot@all && git p4 clone --dest="$git" //depot@all &&
cd "$git" && cd "$git" &&
git config git-p4.validLabelRegexp ".*TAG.*" && git config git-p4.labelImportRegexp ".*TAG.*" &&
git p4 sync --import-labels --verbose && git p4 sync --import-labels --verbose &&


git tag && git tag &&