#!/usr/bin/python
# ==============================================================================
# Copyright and license info is available in the LICENSE file included with
# the Server Deployment Package (SDP), and also available online:
# https://swarm.workshop.perforce.com/projects/perforce-software-sdp/view/main/LICENSE
# ------------------------------------------------------------------------------
"""
This program should lock a perforce label.
The only command line parameter is the label
p4lock.py LABEL
"""
import isitalabel
import os
import re
import sys
def lock (label):
x = isitalabel.check(label)
if x == 0:
print("There is no label %s.") % (label)
sys.exit(1)
label_pattern = re.compile(r"^Label:\s+.*")
lock_pattern = re.compile(r"^Options:\s+unlocked")
tempfile = open("temp.txt", "w")
linelist = []
# owner.txt is a one line file generated by the p4unlock.py script. It saves
# the name of the label owner so it can be put back by this script.
# The owner line is removed by p4unlock.py because Perforce doesn't allow
# anyone except the owner of a label to update the label.
found_owner = True
if os.path.isfile("owner.txt"):
ownerfile = open("owner.txt", "r")
for line in ownerfile.readlines():
owner = line
ownerfile.close()
os.remove("owner.txt")
else:
found_owner = False
for line in os.popen("p4 label -o %s" % (label), "r").readlines():
if found_owner:
match = label_pattern.match(line)
if match != None:
linelist = linelist + ["Owner:\t%s\n" % (owner)]
line = lock_pattern.sub(r"Options: locked", line)
linelist = linelist + [line]
tempfile.writelines(linelist)
tempfile.close ()
os.system("p4 label -i < temp.txt")
os.remove("temp.txt")
def main():
if len(sys.argv) < 2:
print ('Invalid input')
print ('You must specify a label')
print ('usage: p4lock.py LABELNAME')
else:
label = sys.argv[1]
lock(label)
###########################################################################
# main
if __name__ == '__main__':
main()