def _link_local_copy(self, server_instance: ServerInstance) -> None:
     """Actually link the local copy."""
     mod_folder = join(server_instance.get_server_instance_path(), server_instance.S.linked_mod_folder_name,
                       "@" + self.name)
     mod_fix_settings = server_instance.S.fix_settings.mod_fix_settings
     local_folder = abspath(mod_fix_settings["odkai_local_path"])
     symlink(local_folder, mod_folder)
 def test_should_create_a_symlink(self, reset_folder_structure):
     """Symlink function should create a symlink."""
     test_path = test_folder_structure_path()
     src = join(test_path, "TestFolder1")
     dest = join(test_path, "__server__TestServer0", "TestFolder1")
     symlink(src, dest)
     assert islink(dest)
     assert isfile(join(dest, "testFile1.txt"))
Beispiel #3
0
 def test_on_update_should_force_the_local_copy(self):
     """A mod fix odkai local on update should force the local copy."""
     unlink(self.mod_folder)
     symlink(join(self.test_path, "!Workshop", "@ODKAI"), self.mod_folder)
     assert not isfile(join(self.mod_folder, "local_mod"))
     self.instance._start_op_on_mods("update", ["ODKAI"])
     assert islink(self.mod_folder)
     assert isfile(join(self.mod_folder, "local_mod"))
Beispiel #4
0
 def _do_op(self, mod_name, arma_folder, target_mod_folder) -> None:
     """Actually create the folder, symlink everything and symlink the keys folder."""
     mod_folder = join(arma_folder, "!Workshop", "@{}".format(mod_name))
     mkdir(target_mod_folder)
     symlink_everything_from_folder(mod_folder, target_mod_folder)
     unusual_keys_folder = join(target_mod_folder, self.keys_folder_name)
     correct_keys_folder = join(target_mod_folder, "Keys")
     symlink(unusual_keys_folder, correct_keys_folder)
Beispiel #5
0
 def _symlink_mod(self, mod_name) -> None:
     """Symlink a single mod in the linked mod folder."""
     server_folder = self.get_server_instance_path()
     workshop_folder = join(self.S.arma_folder, "!Workshop")
     mod_folder = "@" + mod_name
     target_folder = join(server_folder, self.S.linked_mod_folder_name)
     if not islink(join(target_folder, mod_folder)):
         symlink(join(workshop_folder, mod_folder), join(target_folder, mod_folder))
Beispiel #6
0
 def _symlink_warning_folder(self) -> None:
     """Symlink the warning folder inside the linked mod folder if needed."""
     server_folder = self.get_server_instance_path()
     workshop_folder = join(self.S.arma_folder, "!Workshop")
     linked_mod_folder = join(server_folder, self.S.linked_mod_folder_name)
     warning_folder_name = "!DO_NOT_CHANGE_FILES_IN_THESE_FOLDERS"
     warning_folder = join(linked_mod_folder, warning_folder_name)
     if not islink(warning_folder):
         symlink(join(workshop_folder, warning_folder_name), warning_folder)
 def test_should_work_on_old_win(self, reset_folder_structure, mocker,
                                 monkeypatch):
     """Symlink function should work on old win."""
     mocker.patch("os.symlink", "")  # disable modern symlink
     test_path = test_folder_structure_path()
     src = join(test_path, "TestFolder1")
     dest = join(test_path, "__server__TestServer0", "TestFolder1")
     symlink(src, dest)
     assert islink(dest)
     assert isfile(join(dest, "testFile1.txt"))
     with pytest.raises(OSError):
         symlink(src, dest)  # check that errors correctly
Beispiel #8
0
 def _link_keys_in_folder(self, mods_root_folder: str) -> None:
     """Link all keys from the mods in the given folder to the instance keys folder."""
     for mod_folder_name in filter(lambda x: self._should_link_mod_key(x[1:]), listdir(mods_root_folder)):
         mod_folder = abspath(join(mods_root_folder, mod_folder_name))
         # look for the key folder there
         key_folder = list(filter(lambda name: name.lower() == "keys" or name.lower() == "key", listdir(mod_folder)))
         if len(key_folder) > 0:
             # if there's one, the key inside needs to be linked over the main key folder
             mod_key_folder = join(mod_folder, key_folder[0])
             key_files = list(filter(lambda x: self._is_keyfile(join(mod_key_folder, x)), listdir(mod_key_folder)))
             for key_file in key_files:
                 src = join(mod_key_folder, key_file)
                 dest = join(self.get_server_instance_path(), self.keys_folder_name, key_file)
                 # check if the key is already there
                 if not islink(dest):
                     symlink(src, dest)
Beispiel #9
0
 def _prepare_server_core(self) -> None:
     """Symlink or create all needed files and dir for a new server instance."""
     # make all needed symlink
     server_folder = self.get_server_instance_path()
     arma_folder_list = listdir(self.S.arma_folder)
     to_be_linked = list(filter(lambda x: self._filter_symlinks(x), arma_folder_list))
     for el in to_be_linked:
         src = join(self.S.arma_folder, el)
         dest = join(server_folder, el)
         symlink(src, dest)
     # Create the needed folder
     to_be_created = [self.keys_folder_name, self.S.linked_mod_folder_name,
                      self.S.copied_mod_folder_name, "userconfig"]
     for folder in to_be_created:
         folder = join(server_folder, folder)
         mkdir(folder)
     # Copy the arma keyfiles
     for key in self.arma_keys:
         arma_key_folder = join(self.S.arma_folder, self.keys_folder_name)
         instance_key_folder = join(server_folder, self.keys_folder_name)
         if isfile(join(arma_key_folder, key)):
             symlink(join(arma_key_folder, key), join(instance_key_folder, key))
 def _link_cba(self, server_instance: ServerInstance) -> None:
     """Symlink the cba_settings.sqf specified in the cba_settings field."""
     cba_settings_target = self._get_cba_path(server_instance)
     if not islink(cba_settings_target):
         symlink(self._get_default_cba_path(server_instance),
                 cba_settings_target)