internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: archlinux/archinstall

Issue:
Duplicate formatting on master
Looks like partitions are getting formatted twice. It's not breaking anything but might be worth fixing eventually.


Discussion:
![2021-04-12-123257_1275x317_scrot](https://user-images.githubusercontent.com/861439/114404128-b72cae80-9ba5-11eb-8783-22ce2d9e01e9.png)


Resolving patch:
diff --git a/examples/guided.py b/examples/guided.py
--- a/examples/guided.py
+++ b/examples/guided.py
@@ -292,8 +292,8 @@ def perform_installation_steps():
 					unlocked_device.format(fs.find_partition('/').filesystem)
 					unlocked_device.mount('/mnt')
 			else:
-				fs.find_partition('/').format(fs.find_partition('/').filesystem)
 				fs.find_partition('/').mount('/mnt')
+			
 			if hasUEFI():
 				fs.find_partition('/boot').mount('/mnt/boot')
 	


Test patch:
Repository: archlinux/archinstall

Issue:
Check internet connection before formatting disk
At the moment, the installation errors out after the disk has been formatted in case there is no internet connection.

Would also be nice to be able to configure wifi properly, but that probably has to wait a bit longer.


Discussion:
I'll add a check to make sure pacman can access it's configured mirrors before continuing.

---

The wifi-configuration part has been discussed quite thurrowly, and the consensus is that archinstall will most likely never include wifi configuration. There's other tools that does this way better, and the wifi configuration can get so complex that it's almost a full project of it's own. So `iwctl` will be recommended instead :)
I agree - users should have internet configured before running archinstall. iwd isn't hard to use.
> I agree - users should have internet configured before running archinstall. iwd isn't hard to use.

I'd then even suggest checking the internet connection on starting archinstall with a small error message to configure it first. Just pinging a mirror or something like that.
> I agree - users should have internet configured before running archinstall. iwd isn't hard to use.

They should have a reachable mirror*

Resolving patch:
diff --git a/archinstall/lib/networking.py b/archinstall/lib/networking.py
--- a/archinstall/lib/networking.py
+++ b/archinstall/lib/networking.py
@@ -26,6 +26,14 @@ def list_interfaces(skip_loopback=True):
 	return interfaces
 
 
+def check_mirror_reachable():
+	try:
+		check = SysCommand("pacman -Sy")
+		return check.exit_code == 0
+	except:
+		return False		
+
+
 def enrich_iface_types(interfaces: dict):
 	result = {}
 	for iface in interfaces:
diff --git a/examples/guided.py b/examples/guided.py
--- a/examples/guided.py
+++ b/examples/guided.py
@@ -4,6 +4,7 @@
 
 import archinstall
 from archinstall.lib.hardware import has_uefi
+from archinstall.lib.networking import check_mirror_reachable
 
 if archinstall.arguments.get('help'):
 	print("See `man archinstall` for help.")
@@ -387,5 +388,9 @@ def perform_installation(mountpoint):
 	archinstall.log(f"Disk states after installing: {archinstall.disk_layouts()}", level=logging.DEBUG)
 
 
+if not check_mirror_reachable():
+	archinstall.log("Arch Linux mirrors are not reachable. Please check your internet connection and try again.", level=logging.INFO, fg="red")
+	exit(1)
+
 ask_user_questions()
 perform_installation_steps()


Test patch:
Repository: archlinux/archinstall

Issue:
cmd_output is undeclared in luks.py but is used when raising an exception
```
		if cmd_handle.exit_code != 0:
			raise DiskError(f'Could not encrypt volume "{partition.path}": {cmd_output}')
```

This will need to be written get the output from the cmd_handle instance of the SysCommand class, or else if this is thrown the output won't be displayed, and we'll instead get an undeclared variable error.


Discussion:

Resolving patch:
diff --git a/archinstall/lib/luks.py b/archinstall/lib/luks.py
--- a/archinstall/lib/luks.py
+++ b/archinstall/lib/luks.py
@@ -43,7 +43,7 @@ def __exit__(self, *args, **kwargs):
 
 	def encrypt(self, partition, password=None, key_size=512, hash_type='sha512', iter_time=10000, key_file=None):
 		if not self.partition.allow_formatting:
-			raise DiskError(f'Could not encrypt volume {self.partition} due to it having a formatting lock.')
+			raise DiskError(f'Could not encrypt volume {partition} due to it having a formatting lock.')
 
 		log(f'Encrypting {partition} (This might take a while)', level=logging.INFO)
 
@@ -107,7 +107,7 @@ def encrypt(self, partition, password=None, key_size=512, hash_type='sha512', it
 				raise err
 
 		if cmd_handle.exit_code != 0:
-			raise DiskError(f'Could not encrypt volume "{partition.path}": {cmd_output}')
+			raise DiskError(f'Could not encrypt volume "{partition.path}": {b"".join(cmd_handle)}')
 
 		return key_file
 


Test patch:
Repository: archlinux/archinstall

Issue:
PermissionError redeclared in exceptions.py shadows built-in PermissionError class
```
class PermissionError(BaseException):
	pass
```

Can we remove this and just use the built-in? Or we could rename ours to something different.


Discussion:
Humm, can be removed.

Resolving patch:
diff --git a/archinstall/lib/exceptions.py b/archinstall/lib/exceptions.py
--- a/archinstall/lib/exceptions.py
+++ b/archinstall/lib/exceptions.py
@@ -29,10 +29,6 @@ class HardwareIncompatibilityError(BaseException):
 	pass
 
 
-class PermissionError(BaseException):
-	pass
-
-
 class UserError(BaseException):
 	pass
 


Test patch:
Repository: archlinux/archinstall

Issue:
Add ability to load a config file from a URL and use that for installation
This would compliment the feature to use a configuration file


Discussion:

Resolving patch:
diff --git a/archinstall/__init__.py b/archinstall/__init__.py
--- a/archinstall/__init__.py
+++ b/archinstall/__init__.py
@@ -1,5 +1,8 @@
 """Arch Linux installer - guided, templates etc."""
-from argparse import ArgumentParser, FileType
+import urllib.error
+import urllib.parse
+import urllib.request
+from argparse import ArgumentParser
 
 from .lib.disk import *
 from .lib.exceptions import *
@@ -25,7 +28,7 @@
 
 def initialize_arguments():
 	config = {}
-	parser.add_argument("--config", nargs="?", help="json config file", type=FileType("r", encoding="UTF-8"))
+	parser.add_argument("--config", nargs="?", help="JSON configuration file or URL")
 	parser.add_argument("--silent", action="store_true",
 						help="Warning!!! No prompts, ignored if config is not passed")
 	parser.add_argument("--script", default="guided", nargs="?", help="Script to run for installation", type=str)
@@ -41,7 +44,15 @@ def initialize_arguments():
 	args = parser.parse_args()
 	if args.config is not None:
 		try:
-			config = json.load(args.config)
+			# First, let's check if this is a URL scheme instead of a filename
+			parsed_url = urllib.parse.urlparse(args.config)
+
+			if not parsed_url.scheme:  # The Profile was not a direct match on a remote URL, it must be a local file.
+				with open(args.config) as file:
+					config = json.load(file)
+			else:  # Attempt to load the configuration from the URL.
+				with urllib.request.urlopen(args.config) as response:
+					config = json.loads(response.read())
 		except Exception as e:
 			print(e)
 		# Installation can't be silent if config is not passed


Test patch:
Repository: archlinux/archinstall

Issue:
Add ability to specify services to enable in the configuration file
A thought - in addition to users giving a package list, what about a service list too? This could be used to iterate over and run `systemctl enable {service}` within a chroot environment. 

Possible use-case;

```
    "packages": ["docker", "git", "nginx", "wget", "zsh"],
    "services": ["docker", "nginx"]
```


Discussion:
custom-commands could also be used for this instead, of course.
> custom-commands could also be used for this instead, of course.

But yeah this would infact be better from a ux perspective
We already have an enable service method and it's used in profiles already so this ought to be easy actually

Resolving patch:
diff --git a/examples/guided.py b/examples/guided.py
--- a/examples/guided.py
+++ b/examples/guided.py
@@ -379,6 +379,11 @@ def perform_installation(mountpoint):
 						archinstall.log(' * Profile\'s post configuration requirements was not fulfilled.', fg='red')
 						exit(1)
 
+		# If the user provided a list of services to be enabled, pass the list to the enable_service function.
+		# Note that while it's called enable_service, it can actually take a list of services and iterate it.
+		if archinstall.arguments.get('services', None):
+			installation.enable_service(*archinstall.arguments['services'])
+
 		# If the user provided custom commands to be run post-installation, execute them now.
 		if archinstall.arguments.get('custom-commands', None):
 			run_custom_user_commands(archinstall.arguments['custom-commands'], installation)


Test patch:
Repository: archlinux/archinstall

Issue:
Guided installation doesn't detect if it doesn't have root privileges
I ran the guided installation in userspace on my computer to install Arch on a USB drive. I got fairly far in the installation process before getting the following error "PermissionError: [Errno 13] Permission denied: '/var/log/archinstall'". If the guided installer isn't invoked as root, it should detect that as soon as it's launched. It should then either exit or invoke sudo to get root privileges.


Discussion:
Nicely spotted! That's an oversight since introducing the `/var/log/archinstall` log placement, it used to be placed in `~/.cache/archinstall` but moved to `/var/log/archinstall` for a more traditional location.

I'll see which road we'll take, if we'll omit the `/var/log/archinstall` placement only if we don't have permission, or if we should require root privileges all together and warn early on. Because I don't think strictly speaking the installation itself requires root, and I think I used to install in a loopdev without root (but perhaps I just ran it as sudo out of habbit back when I tested).

Anyway, we'll have this sorted out! : )
The error should be fixed in [master](https://github.com/Torxed/archinstall/tree/master) now.
I still don't know if you're able to install Arch without root, I'm afraid that pacstrap etc might have some permission errors in the installed medium.

Once the next release comes out you should be able to test this, unless I manage to get around to it against master (instead of release versions).

Resolving patch:
diff --git a/examples/guided.py b/examples/guided.py
--- a/examples/guided.py
+++ b/examples/guided.py
@@ -12,6 +12,9 @@
 if archinstall.arguments.get('help'):
 	print("See `man archinstall` for help.")
 	exit(0)
+if os.getuid() != 0:
+	print("Archinstall requires root privileges to run. See --help for more.")
+	exit(1)
 
 # For support reasons, we'll log the disk layout pre installation to match against post-installation layout
 archinstall.log(f"Disk states before installing: {archinstall.disk_layouts()}", level=logging.DEBUG)


Test patch:
Repository: archlinux/archinstall

Issue:
Incorrect line ending after "progressbar" finishes
I thought this would be handled in: https://github.com/archlinux/archinstall/blob/54a693be4fa2fbce83fd894b5ac3b0909f3a1e10/archinstall/lib/general.py#L157-L161

![2021-05-21-093818_1024x795_scrot](https://user-images.githubusercontent.com/861439/119100996-cc082780-ba18-11eb-844d-aafd34ea583c.png)



Discussion:

Resolving patch:
diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py
--- a/archinstall/lib/general.py
+++ b/archinstall/lib/general.py
@@ -333,6 +333,10 @@ def create_session(self):
 			while self.session.ended is None:
 				self.session.poll()
 
+			if self.peak_output:
+				sys.stdout.write('\n')
+				sys.stdout.flush()
+
 		except SysCallError:
 			return False
 


Test patch:
Repository: archlinux/archinstall

Issue:
Have NTP enabled as an install-time option
Having an accurate clock is a huge quality of life improvement. Maybe ask right after timezone and enable relevant systemd units if the user selects yes.


Discussion:
if timezone is not empty, we could add "Would you like to enable automatic time synchronization?"
It's also a part of the [Installation guide](https://wiki.archlinux.org/index.php/Installation_guide#Update_the_system_clock).

Resolving patch:
diff --git a/examples/guided.py b/examples/guided.py
--- a/examples/guided.py
+++ b/examples/guided.py
@@ -237,6 +237,12 @@ def ask_user_questions():
 	if not archinstall.arguments.get('timezone', None):
 		archinstall.arguments['timezone'] = archinstall.ask_for_a_timezone()
 
+	if archinstall.arguments['timezone']:
+		if not archinstall.arguments.get('ntp', False):
+			archinstall.arguments['ntp'] = input("Would you like to use automatic time synchronization (NTP) with the default time servers? [Y/n]: ").strip().lower() in ('y', 'yes')
+			if archinstall.arguments['ntp']:
+				archinstall.log("Hardware time and other post-configuration steps might be required in order for NTP to work. For more information, please check the Arch wiki.", fg="yellow")
+
 
 def perform_installation_steps():
 	print()
@@ -369,6 +375,9 @@ def perform_installation(mountpoint):
 			if timezone := archinstall.arguments.get('timezone', None):
 				installation.set_timezone(timezone)
 
+			if archinstall.arguments.get('ntp', False):
+				installation.activate_ntp()
+
 			if (root_pw := archinstall.arguments.get('!root-password', None)) and len(root_pw):
 				installation.user_set_pw('root', root_pw)
 


Test patch:
Repository: archlinux/archinstall

Issue:
Add feature to write out config to file in logs dir w/ credentials stripped
I was thinking about adding this feature. Probably should go here:

https://github.com/archlinux/archinstall/blob/4bb644bf5b8ce70bc08c76deeeb6fe71a3c36c1a/examples/guided.py#L261


Discussion:

Resolving patch:
diff --git a/examples/guided.py b/examples/guided.py
--- a/examples/guided.py
+++ b/examples/guided.py
@@ -258,7 +258,10 @@ def perform_installation_steps():
 	print()
 	print('This is your chosen configuration:')
 	archinstall.log("-- Guided template chosen (with below config) --", level=logging.DEBUG)
-	archinstall.log(json.dumps(archinstall.arguments, indent=4, sort_keys=True, cls=archinstall.JSON), level=logging.INFO)
+	user_configuration = json.dumps(archinstall.arguments, indent=4, sort_keys=True, cls=archinstall.JSON)
+	archinstall.log(user_configuration, level=logging.INFO)
+	with open("/var/log/archinstall/user_configuration.json", "w") as config_file:
+		config_file.write(user_configuration)
 	print()
 
 	if not archinstall.arguments.get('silent'):
@@ -441,12 +444,18 @@ def perform_installation(mountpoint):
 	archinstall.arguments['harddrive'].keep_partitions = False
 	# Temporary workaround to make Desktop Environments work
 	if archinstall.arguments.get('profile', None) is not None:
-		archinstall.arguments['profile'] = archinstall.Profile(None, archinstall.arguments.get('profile', None))
+		if type(archinstall.arguments.get('profile', None)) is dict:
+			archinstall.arguments['profile'] = archinstall.Profile(None, archinstall.arguments.get('profile', None)['path'])
+		else:
+			archinstall.arguments['profile'] = archinstall.Profile(None, archinstall.arguments.get('profile', None))
 	else:
 		archinstall.arguments['profile'] = None
 	if archinstall.arguments.get('mirror-region', None) is not None:
-		selected_region = archinstall.arguments.get('mirror-region', None)
-		archinstall.arguments['mirror-region'] = {selected_region: archinstall.list_mirrors()[selected_region]}
+		if type(archinstall.arguments.get('mirror-region', None)) is dict:
+			archinstall.arguments['mirror-region'] = archinstall.arguments.get('mirror-region', None)
+		else:
+			selected_region = archinstall.arguments.get('mirror-region', None)
+			archinstall.arguments['mirror-region'] = {selected_region: archinstall.list_mirrors()[selected_region]}
 	archinstall.arguments['sys-language'] = archinstall.arguments.get('sys-language', 'en_US')
 	archinstall.arguments['sys-encoding'] = archinstall.arguments.get('sys-encoding', 'utf-8')
 	if archinstall.arguments.get('gfx_driver', None) is not None:


Test patch:
Repository: archlinux/archinstall

Issue:
Output looks broken with pacman 6
Since `pacman` v6 was released, it introduced paralell downloads among other things (color enhancement and other good stuff).
Due to how we show "progressbars" in archinstall, the output looks broken and scrambled.

**The installs work fine!**

It's jut that the outlook looks garbage because: https://github.com/archlinux/archinstall/blob/615d0d38dd577a054151abcebf32b3a30b98e3fd/archinstall/lib/general.py#L212-L223


Discussion:

Resolving patch:
diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py
--- a/archinstall/lib/general.py
+++ b/archinstall/lib/general.py
@@ -202,27 +202,6 @@ def peak(self, output: Union[str, bytes]) -> bool:
 				except UnicodeDecodeError:
 					return False
 
-			output = output.strip('\r\n ')
-			if len(output) <= 0:
-				return False
-
-			from .user_interaction import get_terminal_width
-
-			# Move back to the beginning of the terminal
-			sys.stdout.flush()
-			sys.stdout.write("\033[%dG" % 0)
-			sys.stdout.flush()
-
-			# Clear the line
-			sys.stdout.write(" " * get_terminal_width())
-			sys.stdout.flush()
-
-			# Move back to the beginning again
-			sys.stdout.flush()
-			sys.stdout.write("\033[%dG" % 0)
-			sys.stdout.flush()
-
-			# And print the new output we're peaking on:
 			sys.stdout.write(output)
 			sys.stdout.flush()
 		return True


Test patch:
Repository: archlinux/archinstall

Issue:
Archinstall does not properly unmount all partitions from a drive before running parted -s [drive] mklabel
![VirtualBox_Arch_03_06_2021_18_54_31](https://user-images.githubusercontent.com/277927/120722456-c17c7200-c49d-11eb-8d93-21f7c715f99b.png)



Discussion:
#548 is trying to correct this behavior

Resolving patch:
diff --git a/archinstall/lib/disk.py b/archinstall/lib/disk.py
--- a/archinstall/lib/disk.py
+++ b/archinstall/lib/disk.py
@@ -448,16 +448,16 @@ def __enter__(self, *args, **kwargs):
 		if self.blockdevice.keep_partitions is False:
 			log(f'Wiping {self.blockdevice} by using partition format {self.mode}', level=logging.DEBUG)
 			if self.mode == GPT:
-				if self.raw_parted(f'{self.blockdevice.device} mklabel gpt').exit_code == 0:
+				if self.parted_mklabel(self.blockdevice.device, "gpt"):
 					self.blockdevice.flush_cache()
 					return self
 				else:
-					raise DiskError('Problem setting the partition format to GPT:', f'/usr/bin/parted -s {self.blockdevice.device} mklabel gpt')
+					raise DiskError('Problem setting the disk label type to GPT:', f'/usr/bin/parted -s {self.blockdevice.device} mklabel gpt')
 			elif self.mode == MBR:
-				if SysCommand(f'/usr/bin/parted -s {self.blockdevice.device} mklabel msdos').exit_code == 0:
+				if self.parted_mklabel(self.blockdevice.device, "msdos"):
 					return self
 				else:
-					raise DiskError('Problem setting the partition format to MBR:', f'/usr/bin/parted -s {self.blockdevice.device} mklabel msdos')
+					raise DiskError('Problem setting the disk label type to msdos:', f'/usr/bin/parted -s {self.blockdevice.device} mklabel msdos')
 			else:
 				raise DiskError(f'Unknown mode selected to format in: {self.mode}')
 
@@ -552,6 +552,14 @@ def set_name(self, partition: int, name: str):
 	def set(self, partition: int, string: str):
 		return self.parted(f'{self.blockdevice.device} set {partition + 1} {string}') == 0
 
+	def parted_mklabel(self, device: str, disk_label: str):
+		# Try to unmount devices before attempting to run mklabel
+		try:
+			SysCommand(f'bash -c "umount {device}?"')
+		except:
+			pass
+		return self.raw_parted(f'{device} mklabel {disk_label}').exit_code == 0
+
 
 def device_state(name, *args, **kwargs):
 	# Based out of: https://askubuntu.com/questions/528690/how-to-get-list-of-all-non-removable-disk-device-names-ssd-hdd-and-sata-ide-onl/528709#528709


Test patch:
Repository: archlinux/archinstall

Issue:
Version Bump in conf.py?
https://github.com/archlinux/archinstall/blob/a4033a7d3a94916f2b4972d212f9d0069fca39cd/docs/conf.py#L44


Discussion:

Resolving patch:
diff --git a/docs/conf.py b/docs/conf.py
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -41,7 +41,7 @@ def setup(app):
 author = 'Anton Hvornum'
 
 # The full version, including alpha/beta/rc tags
-release = 'v2.1.0'
+release = 'v2.3.0.dev0'
 
 # -- General configuration ---------------------------------------------------
 


Test patch:
Repository: archlinux/archinstall

Issue:
Exit code 256 in networking.py
While doing PR #562 I noticed that we check if exit code is 256. I thought for any process it was an 8 bit value and could be 0 through 255, so I'm not sure about this logic. I'd like to figure out why it was written in this manner and it probably should be fixed. Maybe drop the exit code check entirely? 


Discussion:

Resolving patch:
diff --git a/archinstall/lib/networking.py b/archinstall/lib/networking.py
--- a/archinstall/lib/networking.py
+++ b/archinstall/lib/networking.py
@@ -31,9 +31,8 @@ def list_interfaces(skip_loopback=True):
 def check_mirror_reachable():
 	if (exit_code := SysCommand("pacman -Sy").exit_code) == 0:
 		return True
-	elif exit_code == 256:
-		if os.geteuid() != 0:
-			log("check_mirror_reachable() uses 'pacman -Sy' which requires root.", level=logging.ERROR, fg="red")
+	elif os.geteuid() != 0:
+		log("check_mirror_reachable() uses 'pacman -Sy' which requires root.", level=logging.ERROR, fg="red")
 
 	return False
 


Test patch:
Repository: archlinux/archinstall

Issue:
re_rank_mirrors bug
`re_rank_mirrors` from `archinstall/lib/mirrors.py` does not work. Since `SyncCommand` doesn't run command from shell, stdout redirection (`foo > bar`) doesn't work. 

Also, using source file as destination file does not seem to work. File becomes empty.


Discussion:

Resolving patch:
diff --git a/archinstall/lib/mirrors.py b/archinstall/lib/mirrors.py
--- a/archinstall/lib/mirrors.py
+++ b/archinstall/lib/mirrors.py
@@ -123,10 +123,17 @@ def use_mirrors(regions: dict, destination='/etc/pacman.d/mirrorlist'):
 	return True
 
 
-def re_rank_mirrors(top=10, *positionals, **kwargs):
-	if SysCommand(f'/usr/bin/rankmirrors -n {top} /etc/pacman.d/mirrorlist > /etc/pacman.d/mirrorlist').exit_code == 0:
-		return True
-	return False
+def re_rank_mirrors(
+	top: int = 10,
+	src: str = '/etc/pacman.d/mirrorlist',
+	dst: str = '/etc/pacman.d/mirrorlist',
+) -> bool:
+	cmd = SysCommand(f"/usr/bin/rankmirrors -n {top} {src}")
+	if cmd.exit_code != 0:
+		return False
+	with open(dst, 'w') as f:
+		f.write(str(cmd))
+	return True
 
 
 def list_mirrors(sort_order=["https", "http"]):


Test patch:
Repository: archlinux/archinstall

Issue:
use_mirrors bug
https://github.com/archlinux/archinstall/blob/ba725517fd290a60cd4e1ea570dbbf94a47ede05/archinstall/lib/mirrors.py#L116-L123

This code doesn't open destination file in append mode. So, if we pass a dict of mirrors with multiple regions, file will be rewritten `len(regions)` times and only the last entry will be preserved.


Discussion:

Resolving patch:
diff --git a/archinstall/lib/mirrors.py b/archinstall/lib/mirrors.py
--- a/archinstall/lib/mirrors.py
+++ b/archinstall/lib/mirrors.py
@@ -1,6 +1,6 @@
 import urllib.error
 import urllib.request
-from typing import Union
+from typing import Union, Mapping, Iterable
 
 from .general import *
 from .output import log
@@ -113,14 +113,16 @@ def insert_mirrors(mirrors, *args, **kwargs):
 	return True
 
 
-def use_mirrors(regions: dict, destination='/etc/pacman.d/mirrorlist'):
+def use_mirrors(
+	regions: Mapping[str, Iterable[str]],
+	destination: str ='/etc/pacman.d/mirrorlist'
+) -> None:
 	log(f'A new package mirror-list has been created: {destination}', level=logging.INFO)
-	for region, mirrors in regions.items():
-		with open(destination, 'w') as mirrorlist:
+	with open(destination, 'w') as mirrorlist:
+		for region, mirrors in regions.items():
 			for mirror in mirrors:
 				mirrorlist.write(f'## {region}\n')
 				mirrorlist.write(f'Server = {mirror}\n')
-	return True
 
 
 def re_rank_mirrors(top=10, *positionals, **kwargs):


Test patch: