The P4Connection class is the main player in P4.Net. This represents a connection to the Perforce server. Every utility that uses P4.Net will have some variation of the following code:
# Standard Python and P4Python | # IronPython and P4.Net | ||
import clr | |||
1 | from System import Array, String | ||
clr.AddReferenceToFile('P4API.dll') | |||
import p4 as P4API | import P4API | ||
p4 = P4API.P4() | p4 = P4API.P4Connection() | ||
2 | p4.parse_forms() | ||
p4.connect() | p4.Connect() | ||
lname = 'P4NetTestingSample' | lname = 'P4NetTestingSample' | ||
# build my label | # build my label | ||
labelForm = p4.fetch_label(lname) | labelForm = p4.Fetch_Form('label', lname) | ||
labelForm['Description'] = 'Created for P4.Net sample' | labelForm['Description'] = 'Created for P4.Net sample' | ||
3 | view = ['//guest/shawn_hladky/...'] | view = Array[String](['//guest/shawn_hladky/...']) | |
labelForm['View'] = view | labelForm.ArrayFields['View'] = view | ||
res = p4.save_label(labelForm) | res = p4.Save_Form(labelForm) | ||
4 | if len(p4.errors) > 0: | if res.HasErrors(): | |
for e in p4.errors: print e | for e in res.Errors: print e | ||
# My list of changes. This is totally arbitrary | # My list of changes. This is totally arbitrary | ||
changes=['5774', '5680', '5636', '5444'] | changes=['5774', '5680', '5636', '5444'] | ||
sorted_changes = changes.sort() | sorted_changes = changes.sort() | ||
# dictionary: keyed by file, value = revision | # dictionary: keyed by file, value = revision | ||
filerevs = {} | filerevs = {} | ||
# spin the description on each file | # spin the description on each file | ||
5 | for chg in p4.run_describe('-s', *changes): | for chg in p4.Run('describe', '-s', *changes): | |
6 | depotFiles = chg['depotFile'] | depotFiles = chg.ArrayFields['depotFile'] | |
revisions = chg['rev'] | revisions = chg.ArrayFields['rev'] | ||
for i in range(0, len(depotFiles)): | for i in range(0, len(depotFiles)): | ||
key,value = depotFiles[i], revisions[i] | key,value = depotFiles[i], revisions[i] | ||
filerevs[key]=value | filerevs[key]=value | ||
# convert the dictionary to a list | # convert the dictionary to a list | ||
flist = [] | flist = [] | ||
for k,v in filerevs.items(): | for k,v in filerevs.items(): | ||
flist.append("%s#%s" % (k,v)) | flist.append("%s#%s" % (k,v)) | ||
# now I want to run in non-parsed mode | |||
p4.disconnect() | |||
p4 = P4API.P4() | |||
7 | p4.connect() | ||
out = p4.run('labelsync', '-l', lname, *flist) | out = p4.RunUnParsed('labelsync', '-l', lname, *flist) | ||
for s in out: print s | for s in out: print s | ||
# delete the label to keep the public depot clean :-) | # delete the label to keep the public depot clean :-) | ||
p4.run('label', '-d', lname) | p4.RunUnParsed('label', '-d', lname) | ||
p4.disconnect() | p4.Disconnect() |