creategroups.py #5

  • //
  • guest/
  • perforce_software/
  • sdp/
  • main/
  • Maintenance/
  • creategroups.py
  • View
  • Commits
  • Open Download .zip Download (2 KB)
#!/usr/bin/env 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 script creates groups on the server based on the entries in a local file called groups.txt
The groups.txt file contains:

group,groupname1
username
username
etc
group,groupname2
username
username
etc

Run:
  python creategroups [instance]

Instance defaults to 1 if not given.
"""

from __future__ import print_function

import re
import sys
import os
from subprocess import *
import sdputils

if len(sys.argv) > 1:
    SDP_INSTANCE = str(sys.argv[1])
else:
    SDP_INSTANCE = '1'

utils = sdputils.SDPUtils(SDP_INSTANCE)
config = utils.config
p4 = utils.p4
utils.login()


def log(msglevel="DEBUG", message=""):
    if msglevel == "ERROR":
        print(message)
        sys.exit(1)
    else:
        print(message)


def runp4cmd(cmd):
    try:
        pipe = Popen(p4 + cmd, shell=True, stdin=PIPE, stdout=PIPE, universal_newlines=True)
        stdout, stderr = pipe.communicate()
        log("DEBUG", stdout)
        if pipe.returncode != 0:
            log("ERROR", "%s%s generated the following error: %s" % (p4, cmd, stderr))
        else:
            return stdout
    except OSError as err:
        log("ERROR", "Execution failed: %s" % (err))


def main():
    groupsfile = open("groups.txt", "r")
    groupfile = open("group.txt", "w")
    count = 0

    for line in groupsfile.readlines():
        try:
            group = (re.match("^group,(.*)", line).groups())
            if count == 0:
                groupfile.write('Group:\t%s\nUsers:\n' % group[0])
                count = 1
            else:
                groupfile.close()
                cmd = 'group -i < group.txt'
                runp4cmd(cmd)
                os.remove('group.txt')
                groupfile = open("group.txt", "w")
                groupfile.write('Group:\t%s\nUsers:\n' % group[0])
        except:
            groupfile.write('\t%s' % line)

    groupfile.close()
    cmd = 'group -i < group.txt'
    runp4cmd(cmd)
    os.remove('group.txt')


if __name__ == "__main__":
    main()
# Change User Description Committed
#7 27331 C. Thomas Tyler Released SDP 2020.1.27325 (2021/01/29).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#6 26161 C. Thomas Tyler Released SDP 2019.3.26159 (2019/11/06).
Copy Up using 'p4 copy -r -b perforce_software-sdp-dev'.
#5 16581 Robert Cowham Standardised processing and formatting.
Made python 2/3 compatible.
These need automated testing!
#4 15856 C. Thomas Tyler Replaced the big license comment block with a shortened
form referencing the LICENSE file included with the SDP
package, and also by the URL for the license file in
The Workshop.
#3 13908 C. Thomas Tyler Pushing SDP 2015.1.13906.
#2 11524 Russell C. Jackson (Rusty) Released updated version of the SDP from Dev.
#1 10148 C. Thomas Tyler Promoted the Perforce Server Deployment Package to The Workshop.