UNCLASSIFIED

Commit 819a08ee authored by Joshua Eason's avatar Joshua Eason
Browse files

Merge branch 'branches' into 'master'

Adding support for individual branch protections

See merge request !16
parents eec0d322 93bfab52
Pipeline #244200 passed with stage
in 39 minutes and 42 seconds
import requests
import logging
import json
from collections import defaultdict
##### Supporting methods
......@@ -95,14 +96,38 @@ def __createProtectedBranch(url, token, id, access):
PARAMS = {}
for i in access:
PARAMS[i] = access[i]
if i != 'allowed_to_push' and i != 'allowed_to_merge':
PARAMS[i] = access[i]
if 'allowed_to_push' in access.keys():
if len(access['allowed_to_push']) == 1:
if access['allowed_to_push'][0] == None:
PARAMS['push_access_level'] = 0
elif access['allowed_to_push'][0].isnumeric():
PARAMS['allowed_to_push'] = access['allowed_to_push'][0]
else:
PARAMS['allowed_to_push[][user_id]'] = []
for i in access['allowed_to_push']:
if i != None:
PARAMS['allowed_to_push[][user_id]'].append(i)
if 'allowed_to_merge' in access.keys():
if len(access['allowed_to_merge']) == 1:
if access['allowed_to_merge'][0] == None:
PARAMS['merge_access_level'] = 0
elif access['allowed_to_merge'].isnumeric():
PARAMS['merge_access_level'] = access['allowed_to_merge'][0]
else:
PARAMS['allowed_to_merge[][user_id]'] = []
for i in access['allowed_to_merge']:
if i != None:
PARAMS['allowed_to_merge[][user_id]'].append(i)
# Delete the protected branch first, otherwise this will fail. However, we don't know for sure
# that this is protected so we ignore the response
response = requests.delete(url + "/" + access['name'], headers = HEADER)
response = requests.post(url, params = PARAMS, headers = HEADER)
if response.status_code != 201:
logging.critical("Failed to create protected branch: " + str(response.status_code) + " " + response.reason)
......@@ -114,7 +139,7 @@ def __listEqual(a, b):
for i in a:
match = False
for j in b:
if i == j and a[i] == b[j]:
if i == j:
match = True
if match == False:
......@@ -167,13 +192,25 @@ def checkProtected(tprotected, protected):
if a['name'] == b['name']:
found = True
if len(a['push_access_levels']) > 0 and len(b['push_access_levels']) > 0:
if __listEqual(a['push_access_levels'][0], b['push_access_levels'][0]) == False:
if __listEqual(a['push_access_levels'], b['push_access_levels']) == False:
misprotectedBranches.append(a)
if len(a['merge_access_levels']) > 0 and len(b['merge_access_levels']) > 0:
if __listEqual(a['merge_access_levels'][0], b['merge_access_levels'][0]) == False:
if __listEqual(a['merge_access_levels'], b['merge_access_levels']) == False:
misprotectedBranches.append(a)
# if len(a['allowed_to_push']) > 0 and len(b['allowed_to_push']) > 0:
# if __listEqual(a['allowed_to_push'], b['allowed_to_push']) == False:
# misprotectedBranches.append(a)
# if len(a['allowed_to_merge']) > 0 and len(b['allowed_to_merge']) > 0:
# if __listEqual(a['allowed_to_merge'], b['allowed_to_merge']) == False:
# misprotectedBranches.append(a)
# if len(a['allowed_to_unprotect']) > 0 and len(b['allowed_to_unprotect']) > 0:
# if __listEqual(a['allowed_to_unprotect'], b['allowed_to_unprotect']) == False:
# misprotectedBranches.append(a)
# If not specified from CLI, GitLab automatically adds this but doesn't match
# when creating from the UI. Doesn't seem to impact anything, so commenting out.
# elif a['unprotect_access_levels'] != b['unprotect_access_levels']:
......@@ -215,34 +252,41 @@ def fixProtected(url, token, id, misprotected):
if 'push_access_levels' in i.keys():
if len(i['push_access_levels']) > 0:
access['push_access_level'] = i['push_access_levels'][0]['access_level']
access['allowed_to_push'] = []
for level in i['push_access_levels']:
access['allowed_to_push'].append(level['user_id'])
if 'merge_access_levels' in i.keys():
if len(i['merge_access_levels']) > 0:
access['merge_access_level'] = i['merge_access_levels'][0]['access_level']
access['allowed_to_merge'] = []
for level in i['merge_access_levels']:
access['allowed_to_merge'].append(level['user_id'])
# access['allowed_to_merge'] = i['merge_access_levels']
if 'unprotect_access_levels' in i.keys():
if len(i['unprotect_access_levels']) > 0:
access['unprotect_access_level'] = i['unprotect_access_levels'][0]['access_level']
access['allowed_to_unprotect'] = i['unprotect_access_levels']
if 'code_owner_approval_required' in i.keys():
access['code_owner_approval_required'] = i['code_owner_approval_required']
if 'allowed_to_push' in i.keys():
if len(i['allowed_to_push']) > 0:
access['allowed_to_push'] = i['allowed_to_push'][0]['access_level']
access['allowed_to_push'] = i['allowed_to_push']
if 'allowed_to_merge' in i.keys():
if len(i['allowed_to_merge']) > 0:
access['allowed_to_merge'] = i['allowed_to_merge'][0]['access_level']
access['allowed_to_merge'] = i['allowed_to_merge']
if 'allowed_to_unprotect' in i.keys():
if len(i['allowed_to_unprotect'] > 0):
access['allowed_to_unprotect'] = i['allowed_to_unprotect'][0]['access_level']
access['allowed_to_unprotect'] = i['allowed_to_unprotect']
__createProtectedBranch(
url,
token,
id,
access
)
\ No newline at end of file
)
# [{'access_level': 40, 'access_level_description': 'Al Fontaine', 'user_id': 1243, 'group_id': None}, {'access_level': 40, 'access_level_description': 'Andy Maksymowicz', 'user_id': 1242, 'group_id': None}, {'access_level': 40, 'access_level_description': 'Hunter Stevens', 'user_id': 3801, 'group_id': None}, {'access_level': 40, 'access_level_description': 'thomas.shepherd', 'user_id': 2280, 'group_id': None}, {'access_level': 0, 'access_level_description': 'No one', 'user_id': None, 'group_id': None}, {'access_level': 40, 'access_level_description': 'Joshua Eason', 'user_id': 514, 'group_id': None}, {'access_level': 40, 'access_level_description': 'alexander.klepal', 'user_id': 2237, 'group_id': None}, {'access_level': 40, 'access_level_description': 'balexand', 'user_id': 2971, 'group_id': None}, {'access_level': 40, 'access_level_description': 'Jeffrey Weatherford', 'user_id': 3827, 'group_id': None}, {'access_level': 40, 'access_level_description': 'Chris Byrd', 'user_id': 7184, 'group_id': None}, {'access_level': 40, 'access_level_description': 'sean.melissari', 'user_id': 1880, 'group_id': None}, {'access_level': 40, 'access_level_description': 'kwami.delali', 'user_id': 2588, 'group_id': None}, {'access_level': 40, 'access_level_description': 'Michael Simmons', 'user_id': 2570, 'group_id': None}, {'access_level': 40, 'access_level_description': 'Olga Ojjeh', 'user_id': 5562, 'group_id': None}, {'access_level': 40, 'access_level_description': 'Fred Melendez', 'user_id': 1572, 'group_id': None}, {'access_level': 40, 'access_level_description': 'Kelley Trujillo', 'user_id': 5480, 'group_id': None}, {'access_level': 40, 'access_level_description': 'bhearn', 'user_id': 2620, 'group_id': None}, {'access_level': 40, 'access_level_description': 'Zachary Sanders', 'user_id': 5938, 'group_id': None}, {'access_level': 40, 'access_level_description': 'shen_vickie@bah.com', 'user_id': 2469, 'group_id': None}, {'access_level': 40, 'access_level_description': 'Christopher Vernooy', 'user_id': 2242, 'group_id': None}]
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment