mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-04-23 19:40:15 +10:00
Minor fixes
This commit is contained in:
11
.github/workflows/main.yml
vendored
11
.github/workflows/main.yml
vendored
@@ -24,20 +24,17 @@ jobs:
|
|||||||
pip3 install pyinstaller
|
pip3 install pyinstaller
|
||||||
|
|
||||||
- run: pyinstaller Opencore-Patcher.spec
|
- run: pyinstaller Opencore-Patcher.spec
|
||||||
- run: |
|
- run: zip OpenCore-Patcher.zip dist/OpenCore-Patcher
|
||||||
ls -lsal dist
|
|
||||||
chmod +x dist/OpenCore-Patcher
|
|
||||||
ls -lsal dist
|
|
||||||
- name: Upload to Artifacts
|
- name: Upload to Artifacts
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: Opencore-Patcher-${{ github.sha }}
|
path: OpenCore-Patcher.zip
|
||||||
path: dist/OpenCore-Patcher
|
|
||||||
- name: Upload to Release
|
- name: Upload to Release
|
||||||
if: github.event_name == 'release'
|
if: github.event_name == 'release'
|
||||||
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
uses: svenstaro/upload-release-action@e74ff71f7d8a4c4745b560a485cc5fdb9b5b999d
|
||||||
with:
|
with:
|
||||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
file: dist/OpenCore-Patcher
|
file: OpenCore-Patcher.zip
|
||||||
tag: ${{ github.ref }}
|
tag: ${{ github.ref }}
|
||||||
file_glob: true
|
file_glob: true
|
||||||
|
|||||||
@@ -21,6 +21,12 @@ def human_fmt(num):
|
|||||||
return "%.1f %s" % (num, "EB")
|
return "%.1f %s" % (num, "EB")
|
||||||
|
|
||||||
|
|
||||||
|
def rmtree_handler(func, path, exc_info):
|
||||||
|
if exc_info[0] == FileNotFoundError:
|
||||||
|
return
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
class BuildOpenCore:
|
class BuildOpenCore:
|
||||||
def __init__(self, model, versions):
|
def __init__(self, model, versions):
|
||||||
self.model = model
|
self.model = model
|
||||||
@@ -40,7 +46,7 @@ class BuildOpenCore:
|
|||||||
Path(self.constants.opencore_zip_copied).unlink()
|
Path(self.constants.opencore_zip_copied).unlink()
|
||||||
if Path(self.constants.opencore_release_folder).exists():
|
if Path(self.constants.opencore_release_folder).exists():
|
||||||
print("Deleting old copy of OpenCore folder")
|
print("Deleting old copy of OpenCore folder")
|
||||||
shutil.rmtree(self.constants.opencore_release_folder)
|
shutil.rmtree(self.constants.opencore_release_folder, onerror=rmtree_handler)
|
||||||
|
|
||||||
print()
|
print()
|
||||||
print("- Adding OpenCore v" + self.constants.opencore_version)
|
print("- Adding OpenCore v" + self.constants.opencore_version)
|
||||||
@@ -129,7 +135,7 @@ class BuildOpenCore:
|
|||||||
|
|
||||||
# Add OpenCanopy
|
# Add OpenCanopy
|
||||||
print("- Adding OpenCanopy GUI")
|
print("- Adding OpenCanopy GUI")
|
||||||
shutil.rmtree(self.constants.resources_path)
|
shutil.rmtree(self.constants.resources_path, onerror=rmtree_handler)
|
||||||
shutil.copy(self.constants.gui_path, self.constants.oc_folder)
|
shutil.copy(self.constants.gui_path, self.constants.oc_folder)
|
||||||
self.config["UEFI"]["Drivers"] = ["OpenCanopy.efi", "OpenRuntime.efi"]
|
self.config["UEFI"]["Drivers"] = ["OpenCanopy.efi", "OpenRuntime.efi"]
|
||||||
|
|
||||||
@@ -197,17 +203,19 @@ class BuildOpenCore:
|
|||||||
|
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
print("- Cleaning up files")
|
print("- Cleaning up files")
|
||||||
for kext in Path(self.constants.kexts_path).rglob("*.zip"):
|
for kext in self.constants.kexts_path.rglob("*.zip"):
|
||||||
with zipfile.ZipFile(kext) as zip_file:
|
with zipfile.ZipFile(kext) as zip_file:
|
||||||
zip_file.extractall(self.constants.kexts_path)
|
zip_file.extractall(self.constants.kexts_path)
|
||||||
kext.unlink()
|
kext.unlink()
|
||||||
shutil.rmtree((Path(self.constants.kexts_path) / Path("__MACOSX")), ignore_errors=True)
|
|
||||||
|
|
||||||
for item in Path(self.constants.oc_folder).glob("*.zip"):
|
for item in self.constants.oc_folder.rglob("*.zip"):
|
||||||
with zipfile.ZipFile(item) as zip_file:
|
with zipfile.ZipFile(item) as zip_file:
|
||||||
zip_file.extractall(self.constants.oc_folder)
|
zip_file.extractall(self.constants.oc_folder)
|
||||||
item.unlink()
|
item.unlink()
|
||||||
shutil.rmtree((Path(self.constants.build_path) / Path("__MACOSX")), ignore_errors=True)
|
|
||||||
|
for i in self.constants.build_path.rglob("__MACOSX"):
|
||||||
|
shutil.rmtree(i)
|
||||||
|
|
||||||
Path(self.constants.opencore_zip_copied).unlink()
|
Path(self.constants.opencore_zip_copied).unlink()
|
||||||
|
|
||||||
def build_opencore(self):
|
def build_opencore(self):
|
||||||
@@ -218,7 +226,7 @@ class BuildOpenCore:
|
|||||||
print("Your OpenCore EFI has been built at:")
|
print("Your OpenCore EFI has been built at:")
|
||||||
print(f" {self.constants.opencore_release_folder}")
|
print(f" {self.constants.opencore_release_folder}")
|
||||||
print("")
|
print("")
|
||||||
input("Press enter to go back")
|
input("Press [Enter] to go back.\n")
|
||||||
|
|
||||||
def copy_efi(self):
|
def copy_efi(self):
|
||||||
utilities.cls()
|
utilities.cls()
|
||||||
@@ -242,7 +250,7 @@ Please build OpenCore first!"""
|
|||||||
for disk in disks["AllDisksAndPartitions"]:
|
for disk in disks["AllDisksAndPartitions"]:
|
||||||
disk_info = plistlib.loads(subprocess.run(f"diskutil info -plist {disk['DeviceIdentifier']}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
disk_info = plistlib.loads(subprocess.run(f"diskutil info -plist {disk['DeviceIdentifier']}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||||
|
|
||||||
all_disks[disk["DeviceIdentifier"]] = {"identifier": disk_info['DeviceNode'], "name": disk_info['MediaName'], "size": disk_info['Size'], "partitions": {}}
|
all_disks[disk["DeviceIdentifier"]] = {"identifier": disk_info["DeviceNode"], "name": disk_info["MediaName"], "size": disk_info["Size"], "partitions": {}}
|
||||||
|
|
||||||
for partition in disk["Partitions"]:
|
for partition in disk["Partitions"]:
|
||||||
partition_info = plistlib.loads(subprocess.run(f"diskutil info -plist {partition['DeviceIdentifier']}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
partition_info = plistlib.loads(subprocess.run(f"diskutil info -plist {partition['DeviceIdentifier']}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||||
@@ -253,7 +261,13 @@ Please build OpenCore first!"""
|
|||||||
"size": partition_info["Size"],
|
"size": partition_info["Size"],
|
||||||
}
|
}
|
||||||
# TODO: Advanced mode
|
# TODO: Advanced mode
|
||||||
menu = utilities.TUIMenu(["Select Disk"], "Please select the disk you would like to install OpenCore to: ", in_between=["Missing disks? Ensure they have an EFI or FAT32 partition."], return_number_instead_of_direct_call=True, loop=True)
|
menu = utilities.TUIMenu(
|
||||||
|
["Select Disk"],
|
||||||
|
"Please select the disk you would like to install OpenCore to: ",
|
||||||
|
in_between=["Missing disks? Ensure they have an EFI or FAT32 partition."],
|
||||||
|
return_number_instead_of_direct_call=True,
|
||||||
|
loop=True,
|
||||||
|
)
|
||||||
for disk in all_disks:
|
for disk in all_disks:
|
||||||
if not any(all_disks[disk]["partitions"][partition]["fs"] == "msdos" for partition in all_disks[disk]["partitions"]):
|
if not any(all_disks[disk]["partitions"][partition]["fs"] == "msdos" for partition in all_disks[disk]["partitions"]):
|
||||||
continue
|
continue
|
||||||
@@ -267,12 +281,20 @@ Please build OpenCore first!"""
|
|||||||
disk_identifier = "disk" + response
|
disk_identifier = "disk" + response
|
||||||
selected_disk = all_disks[disk_identifier]
|
selected_disk = all_disks[disk_identifier]
|
||||||
|
|
||||||
menu = utilities.TUIMenu(["Select Partition"], "Please select the partition you would like to install OpenCore to: ", return_number_instead_of_direct_call=True, loop=True, in_between=["Missing partitions? Ensure they are formatted as an EFI or FAT32.", "", "* denotes likely candidate."])
|
menu = utilities.TUIMenu(
|
||||||
|
["Select Partition"],
|
||||||
|
"Please select the partition you would like to install OpenCore to: ",
|
||||||
|
return_number_instead_of_direct_call=True,
|
||||||
|
loop=True,
|
||||||
|
in_between=["Missing partitions? Ensure they are formatted as an EFI or FAT32.", "", "* denotes likely candidate."],
|
||||||
|
)
|
||||||
for partition in selected_disk["partitions"]:
|
for partition in selected_disk["partitions"]:
|
||||||
if selected_disk["partitions"][partition]["fs"] != "msdos":
|
if selected_disk["partitions"][partition]["fs"] != "msdos":
|
||||||
continue
|
continue
|
||||||
text = f"{partition}: {selected_disk['partitions'][partition]['name']} ({human_fmt(selected_disk['partitions'][partition]['size'])})"
|
text = f"{partition}: {selected_disk['partitions'][partition]['name']} ({human_fmt(selected_disk['partitions'][partition]['size'])})"
|
||||||
if selected_disk["partitions"][partition]["type"] == "EFI" or (selected_disk["partitions"][partition]["type"] == "Microsoft Basic Data" and selected_disk["partitions"][partition]["size"] < 1024 * 1024 * 512): # 512 megabytes:
|
if selected_disk["partitions"][partition]["type"] == "EFI" or (
|
||||||
|
selected_disk["partitions"][partition]["type"] == "Microsoft Basic Data" and selected_disk["partitions"][partition]["size"] < 1024 * 1024 * 512
|
||||||
|
): # 512 megabytes:
|
||||||
text += " *"
|
text += " *"
|
||||||
menu.add_menu_option(text, key=partition[len(disk_identifier) + 1 :])
|
menu.add_menu_option(text, key=partition[len(disk_identifier) + 1 :])
|
||||||
|
|
||||||
@@ -287,7 +309,7 @@ Please build OpenCore first!"""
|
|||||||
f'''do shell script "diskutil mount {disk_identifier}s{response}"'''
|
f'''do shell script "diskutil mount {disk_identifier}s{response}"'''
|
||||||
' with prompt "OpenCore Legacy Patcher needs administrator privileges to mount your EFI."'
|
' with prompt "OpenCore Legacy Patcher needs administrator privileges to mount your EFI."'
|
||||||
" with administrator privileges"
|
" with administrator privileges"
|
||||||
" without altering line endings"
|
" without altering line endings",
|
||||||
]
|
]
|
||||||
|
|
||||||
result = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
result = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
@@ -297,7 +319,9 @@ Please build OpenCore first!"""
|
|||||||
# cancelled prompt
|
# cancelled prompt
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
utilities.TUIOnlyPrint(["Copying OpenCore"], "Press [Enter] to continue", ["An error occurred!"] + result.stderr.decode().split("\n") + ["", "Please report this to the devs at GitHub."]).start()
|
utilities.TUIOnlyPrint(
|
||||||
|
["Copying OpenCore"], "Press [Enter] to go back.\n", ["An error occurred!"] + result.stderr.decode().split("\n") + ["", "Please report this to the devs at GitHub."]
|
||||||
|
).start()
|
||||||
return
|
return
|
||||||
|
|
||||||
# TODO: Remount if readonly
|
# TODO: Remount if readonly
|
||||||
@@ -311,12 +335,12 @@ Please build OpenCore first!"""
|
|||||||
print("- Coping OpenCore onto EFI partition")
|
print("- Coping OpenCore onto EFI partition")
|
||||||
if (mount_path / Path("EFI")).exists():
|
if (mount_path / Path("EFI")).exists():
|
||||||
print("Removing preexisting EFI folder")
|
print("Removing preexisting EFI folder")
|
||||||
shutil.rmtree(mount_path / Path("EFI"))
|
shutil.rmtree(mount_path / Path("EFI"), onerror=rmtree_handler)
|
||||||
|
|
||||||
shutil.copytree(self.constants.opencore_release_folder, mount_path / Path("EFI"))
|
shutil.copytree(self.constants.opencore_release_folder / Path("EFI"), mount_path / Path("EFI"))
|
||||||
shutil.copy(self.constants.icon_path, mount_path)
|
shutil.copy(self.constants.icon_path, mount_path)
|
||||||
print("OpenCore transfer complete")
|
print("OpenCore transfer complete")
|
||||||
print("\nPress [Enter] to continue")
|
print("\nPress [Enter] to continue.\n")
|
||||||
input()
|
input()
|
||||||
else:
|
else:
|
||||||
utilities.TUIOnlyPrint(["Copying OpenCore"], "Press [Enter] to continue", ["EFI failed to mount!", "Please report this to the devs at GitHub."]).start()
|
utilities.TUIOnlyPrint(["Copying OpenCore"], "Press [Enter] to go back.\n", ["EFI failed to mount!", "Please report this to the devs at GitHub."]).start()
|
||||||
|
|||||||
Reference in New Issue
Block a user