Files
2025-09-29 00:52:08 +02:00

223 lines
8.8 KiB
Python
Executable File

# standard lib
import os
import datetime
import shutil
userCommandLineFile = "x:\\gta5\\titleupdate\\dev_ng\\commandline.txt"
platformQuestion = "What game platform are you running your build on?\n"
ctrlQuestion = "What game controller are you using\n"
platformList = ["PC", "PS4", "XBOX"]
controlList = ["XBOX","PS4"]
def selectionMenu(itemList):
'''
Print menu of user options from list
'''
ListNum = 1
for item in itemList:
platfromSelectionMenu = "{0}) {1}".format(ListNum, item)
print(platfromSelectionMenu)
ListNum = ListNum + 1
def inputSelection(platformListInput,questionInput):
"""
Receives and returns user selection, uses selection menu to display options
"""
platformErrorStr = "\n Error, You entered a letter instead of a number."
print("\n")
print(questionInput)
selectionMenu(platformListInput)
if len(platformListInput) > 1:
while True:
userInput = ""
while not userInput.isdigit():
try:
userInput = input("\nPlease enter the number corresponding with your selection:")
userSelectionNum = int(userInput)
userSelectionNum = userSelectionNum - 1
if userSelectionNum not in range(len(platformListInput)):
print("This is not a valid selection \n")
print(questionInput)
selectionMenu(platformListInput)
elif userSelectionNum in range(len(platformListInput)):
userSelection = platformListInput[userSelectionNum]
return userSelection
except ValueError:
print(platformErrorStr)
print(questionInput)
selectionMenu(platformListInput)
else:
break
else:
print("how did you get here? Contact Marco")
else:
print("Help me I'm scared, I really have no idea how you got here. Contact Marco")
def sharedCommandLinePathCleanUp(platformSelection,controlSelection):
"""
Verifies user selected sharedcommandline txt file exists.
"""
sharedCommandLine = "X:\\gta5\\tools_ng\\techart\\script\\python\\standalone\\p4\\CommandLineTool\\SharedCommandLines\\SharedCommandLine" + platformSelection + controlSelection + ".txt"
sharedCommandLineFileExists = os.path.exists(sharedCommandLine)
if sharedCommandLineFileExists:
return(sharedCommandLine)
else:
print("file does not exists, how did you get here?")
def createCommandLineBackUp(commandFileInput, userSelectedSharedCommandlineInput,platformSelection,controlSelection):
"""
Create a back-up directory and back up of GTA V commandlist txt file.
"""
commandFileInputExist = os.path.exists(commandFileInput)
uscerCommandLineFolder = os.path.join("x:\\gta5\\titleupdate\\dev_ng\\")
copiedUserCommandLineFile = os.path.join("x:\\gta5\\titleupdate\\dev_ng\\SharedCommandLine" + platformSelection + controlSelection + ".txt")
if commandFileInputExist:
commandLineBckUpFolder = "x:\\temp\\GtaV_CommandLineBckUp"
bckUpDest = os.path.join(
commandLineBckUpFolder
+ "\\"
+ "CommandLineBckUp_"
+ datetime.datetime.today().strftime("%y-%m-%d-%H-%M-%S")
+ ".xml"
)
bckUpDestStr = str(bckUpDest)
bckUpDir = os.path.exists(commandLineBckUpFolder)
if not bckUpDir:
os.makedirs(commandLineBckUpFolder)
print("Back up folder created at the following directory")
print(commandLineBckUpFolder)
shutil.copy(commandFileInput, bckUpDestStr)
print("Back up commandlines created")
else:
shutil.copy(commandFileInput, bckUpDestStr)
print("Back up commandlines created at the following directory")
print(commandLineBckUpFolder)
else:
shutil.copy(userSelectedSharedCommandlineInput, uscerCommandLineFolder)
os.rename(copiedUserCommandLineFile,commandFileInput)
print("User Command Line File copied")
exit()
def makeLineForLineListFromFile(commandLineFile):
"""
Make and return a list created on line for line from commandline txt file.
"""
linesList = []
with open(commandLineFile, "r") as f_in:
lines = [line.rstrip() for line in f_in]
for item in lines:
item = item.replace("\\","/")
if item not in linesList:
linesList.append(item)
return linesList
def cleansAppendCommandLines(userCommandLineFilesListAppending, missingCommandLinesListAppending):
"""
Removes ### SHARED COMMANDLINES ### from both list and and re-adds in proper location
Appends missing command lines to user command lines in list
"""
sharedCommandLineHeader = "### ADDED SHARED COMMANDLINES ###"
for item in userCommandLineFilesListAppending:
if item == sharedCommandLineHeader:
userCommandLineFilesListAppending.remove(item)
userCommandLineFilesListAppending.append("\n")
userCommandLineFilesListAppending.append(sharedCommandLineHeader)
for item in missingCommandLinesListAppending:
userCommandLineFilesListAppending.append(item)
return(userCommandLineFilesListAppending)
def makeListOfMissingCommandLines(userCommandLinesList,sharedCommandLinesList):
"""
Compares list made from text files and returns list of missing lines
"""
commandLineAppendList = []
for item in sharedCommandLinesList:
if item not in userCommandLinesList:
if item not in commandLineAppendList:
commandLineAppendList.append(item)
else:
print("List has all needed commandlines")
return (commandLineAppendList)
def formatEmptyLines(listInput):
"""
Removes empty lines from list following specfic condition
"""
commandLineReformatList = []
indicesEmptySpaceList = [index for index, element in enumerate(listInput) if element == "\n"]
for index in sorted(indicesEmptySpaceList, reverse=True):
if "###" in listInput[index - 1]:
del listInput[index]
elif "\n" == listInput[index - 1]:
del listInput[index]
indicesHashList = [index for index, element in enumerate(listInput) if "###" in element]
for index in sorted(indicesHashList, reverse=True):
if index > 0:
if "\n" != listInput[index - 1]:
listInput.insert(index, "\n")
return listInput
def reWriteOldCommandLines(updatedUserCommandLineList, userCommandLineFileFile):
with open(userCommandLineFileFile, "w+") as commandLineFileTextFile:
commandLineFileTextFile.truncate()
for item in updatedUserCommandLineList:
commandLineFileTextFile.writelines(item)
commandLineFileTextFile.writelines("\n")
print("Commandline file updated" + "\n" "{0}".format(userCommandLineFile))
def main():
### ask user for input ###
platformSelection = inputSelection(platformList,platformQuestion)
print("You have selected {0} build".format(platformSelection))
controlSelection = inputSelection(controlList,ctrlQuestion)
print("You have selected {0} controller".format(controlSelection))
### verify's path of user selected
userSelectedSharedCommandline = sharedCommandLinePathCleanUp(platformSelection, controlSelection)
## creates back of of orignal commandline ##
createCommandLineBackUp(userCommandLineFile,userSelectedSharedCommandline,platformSelection,controlSelection)
## creates a line for line list of the users commandline
userCommandLineFilesList = makeLineForLineListFromFile(userCommandLineFile)
### creates a line for line list of shared commandline
sharedCommandLineFilesList = makeLineForLineListFromFile(userSelectedSharedCommandline)
### compares user commandlines against shared commmandlines and returns a list of missing commandlines ###
missingCommandLinesList = makeListOfMissingCommandLines(userCommandLineFilesList,sharedCommandLineFilesList)
### cleans and appends list of missing lines to end of list ###
finalUserCommandLines = cleansAppendCommandLines(userCommandLineFilesList, missingCommandLinesList)
### removes unneccsary empty lines and adds new lines where needed ###
finalUserCommandLinesReformated = formatEmptyLines(finalUserCommandLines)
#### writes new appendedlist to users commandlines ###
reWriteOldCommandLines(finalUserCommandLinesReformated, userCommandLineFile)
if __name__ == "__main__":
main()