mirror of
https://gitlab.com/dslackw/slpkg.git
synced 2024-12-25 09:58:41 +01:00
Added option --fetch
Signed-off-by: Dimitris Zlatanidis <d.zlatanidis@gmail.com>
This commit is contained in:
parent
31d6c0d52f
commit
6d614efc9c
5 changed files with 103 additions and 15 deletions
|
@ -1,10 +1,10 @@
|
||||||
## slpkg - ChangeLog
|
## slpkg - ChangeLog
|
||||||
|
|
||||||
### 5.1.1 - 09/06/2024
|
### 5.1.1 - 11/06/2024
|
||||||
|
|
||||||
- Added:
|
- Added:
|
||||||
* Added an 'installed' tag for installed packages in the search command
|
* Added an 'installed' tag for installed packages in the search command
|
||||||
|
* Added option --fetch to see the fastest and the slower mirror
|
||||||
|
|
||||||
### 5.1.0 - 06/06/2024
|
### 5.1.0 - 06/06/2024
|
||||||
|
|
||||||
|
|
10
man/slpkg.1
10
man/slpkg.1
|
@ -1,4 +1,4 @@
|
||||||
.TH slpkg 1 "Orestiada, Hellas" "slpkg 5.1.0" dslackw
|
.TH slpkg 1 "Orestiada, Hellas" "slpkg 5.1.1" dslackw
|
||||||
.SH NAME
|
.SH NAME
|
||||||
.P
|
.P
|
||||||
slpkg \- Package manager utility for Slackware.
|
slpkg \- Package manager utility for Slackware.
|
||||||
|
@ -123,6 +123,14 @@ Skip the installed packages when you try to reinstall them.
|
||||||
Note: This option affects only the dependencies. (to be used with: -i, install)
|
Note: This option affects only the dependencies. (to be used with: -i, install)
|
||||||
.RE
|
.RE
|
||||||
.P
|
.P
|
||||||
|
.B -F, --fetch
|
||||||
|
.RS
|
||||||
|
If the sources of your repository are not optimized for your location, it may take longer to download
|
||||||
|
packages than usual, leading to a poor user experience. It is recommended to fetch the fastest mirror
|
||||||
|
to see the score of the fastest and the slower mirror.
|
||||||
|
(to be used with: -I, repo-info)
|
||||||
|
.RE
|
||||||
|
.P
|
||||||
.B -E, --full-reverse
|
.B -E, --full-reverse
|
||||||
.RS
|
.RS
|
||||||
Full reverse dependency. Works only with -e, dependees command and show the requires too.
|
Full reverse dependency. Works only with -e, dependees command and show the requires too.
|
||||||
|
|
|
@ -77,6 +77,8 @@ class Menu(Configs): # pylint: disable=[R0902]
|
||||||
self.flag_short_repository: str = '-o'
|
self.flag_short_repository: str = '-o'
|
||||||
self.flag_directory: str = '--directory'
|
self.flag_directory: str = '--directory'
|
||||||
self.flag_short_directory: str = '-z'
|
self.flag_short_directory: str = '-z'
|
||||||
|
self.flag_fetch: str = '--fetch'
|
||||||
|
self.flag_short_fetch: str = '-F'
|
||||||
|
|
||||||
self.flag_searches: tuple = (
|
self.flag_searches: tuple = (
|
||||||
self.flag_short_search,
|
self.flag_short_search,
|
||||||
|
@ -110,6 +112,8 @@ class Menu(Configs): # pylint: disable=[R0902]
|
||||||
self.flag_short_repository,
|
self.flag_short_repository,
|
||||||
self.flag_directory,
|
self.flag_directory,
|
||||||
self.flag_short_directory,
|
self.flag_short_directory,
|
||||||
|
self.flag_fetch,
|
||||||
|
self.flag_short_fetch
|
||||||
)
|
)
|
||||||
|
|
||||||
self.commands: dict = {
|
self.commands: dict = {
|
||||||
|
@ -144,7 +148,9 @@ class Menu(Configs): # pylint: disable=[R0902]
|
||||||
],
|
],
|
||||||
'repo-info': [
|
'repo-info': [
|
||||||
self.flag_repository,
|
self.flag_repository,
|
||||||
self.flag_short_repository
|
self.flag_short_repository,
|
||||||
|
self.flag_fetch,
|
||||||
|
self.flag_short_fetch
|
||||||
],
|
],
|
||||||
'configs': [],
|
'configs': [],
|
||||||
'clean-tmp': [],
|
'clean-tmp': [],
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import time
|
||||||
|
import requests
|
||||||
|
|
||||||
from slpkg.configs import Configs
|
from slpkg.configs import Configs
|
||||||
from slpkg.load_data import LoadData
|
from slpkg.load_data import LoadData
|
||||||
|
@ -23,22 +25,45 @@ class RepoInfo(Configs): # pylint: disable=[R0902]
|
||||||
self.utils = Utilities()
|
self.utils = Utilities()
|
||||||
self.repos = Repositories()
|
self.repos = Repositories()
|
||||||
self.columns, self.rows = shutil.get_terminal_size()
|
self.columns, self.rows = shutil.get_terminal_size()
|
||||||
self.name_alignment: int = self.columns - 61
|
|
||||||
|
|
||||||
|
self.name_alignment: int = self.columns - 61
|
||||||
self.name_alignment = max(self.name_alignment, 1)
|
self.name_alignment = max(self.name_alignment, 1)
|
||||||
|
|
||||||
|
self.mirror_alignment: int = self.columns - 32
|
||||||
|
self.mirror_alignment = max(self.mirror_alignment, 1)
|
||||||
|
|
||||||
self.enabled: int = 0
|
self.enabled: int = 0
|
||||||
self.total_packages: int = 0
|
self.total_packages: int = 0
|
||||||
self.repo_data: dict = {}
|
self.repo_data: dict = {}
|
||||||
self.dates: dict = {}
|
self.dates: dict = {}
|
||||||
|
self.mirros_score: dict = {}
|
||||||
|
|
||||||
self.option_for_repository: bool = self.utils.is_option(
|
self.option_for_repository: bool = self.utils.is_option(
|
||||||
('-o', '--repository'), flags)
|
('-o', '--repository'), flags)
|
||||||
|
|
||||||
|
self.option_for_fetch: bool = self.utils.is_option(
|
||||||
|
('-F', '--fetch'), flags)
|
||||||
|
|
||||||
def info(self) -> None:
|
def info(self) -> None:
|
||||||
"""Print information about repositories."""
|
"""Print information about repositories."""
|
||||||
self.load_repo_data()
|
if self.option_for_fetch:
|
||||||
|
self.view_the_score_title()
|
||||||
|
|
||||||
|
if self.option_for_repository:
|
||||||
|
mirror: str = self.repos.repositories[self.repository]['mirror_changelog']
|
||||||
|
self.enabled += 1
|
||||||
|
self.check_mirror_speed(self.repository, mirror)
|
||||||
|
self.view_summary_of_repository()
|
||||||
|
else:
|
||||||
|
for repo, data in self.repos.repositories.items():
|
||||||
|
if data['enable']:
|
||||||
|
mirror: str = data['mirror_changelog']
|
||||||
|
self.enabled += 1
|
||||||
|
self.check_mirror_speed(repo, mirror)
|
||||||
|
self.view_summary_of_all_repositories()
|
||||||
|
else:
|
||||||
|
|
||||||
|
self.load_repo_data()
|
||||||
self.view_the_title()
|
self.view_the_title()
|
||||||
|
|
||||||
if self.option_for_repository:
|
if self.option_for_repository:
|
||||||
|
@ -46,6 +71,33 @@ class RepoInfo(Configs): # pylint: disable=[R0902]
|
||||||
else:
|
else:
|
||||||
self.view_the_repositories_information()
|
self.view_the_repositories_information()
|
||||||
|
|
||||||
|
def check_mirror_speed(self, repo: str, url: str) -> None:
|
||||||
|
"""Check mirrors speed.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
repo: Name of the repository.
|
||||||
|
url: The repository mirror.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
start_time: float = time.time() # Record the start time
|
||||||
|
response = requests.get(url) # pylint: disable=[W3101]
|
||||||
|
end_time: float = time.time() # Record the end time
|
||||||
|
|
||||||
|
url_length = 45 + (self.columns - 80)
|
||||||
|
if url_length < len(url):
|
||||||
|
url: str = f'{url[:url_length]}...'
|
||||||
|
|
||||||
|
if response.status_code == 200:
|
||||||
|
response_time = int((end_time - start_time) * 1000) # Convert to milliseconds
|
||||||
|
self.mirros_score[repo] = response_time
|
||||||
|
print(f"{self.cyan}{repo:<19}{self.endc}{url:<{self.mirror_alignment}}{self.yellow}"
|
||||||
|
f"{response_time:>9} ms{self.endc}")
|
||||||
|
else:
|
||||||
|
print(f"{self.red}{repo:<19}{self.endc}{url:<{self.mirror_alignment}}{self.red}"
|
||||||
|
f"{response.status_code:>12}{self.endc}")
|
||||||
|
except requests.RequestException as e:
|
||||||
|
print(f"{repo:<19}{url:<{self.mirror_alignment}}{e:>12}")
|
||||||
|
|
||||||
def load_repo_data(self) -> None:
|
def load_repo_data(self) -> None:
|
||||||
"""Load repository data."""
|
"""Load repository data."""
|
||||||
self.dates: dict = self.repo_information()
|
self.dates: dict = self.repo_information()
|
||||||
|
@ -66,6 +118,14 @@ class RepoInfo(Configs): # pylint: disable=[R0902]
|
||||||
return self.utils.read_json_file(repo_info_json)
|
return self.utils.read_json_file(repo_info_json)
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
def view_the_score_title(self) -> None:
|
||||||
|
"""Print the title."""
|
||||||
|
title: str = 'Fetching mirrors, please wait...'
|
||||||
|
print(f'{title}\n')
|
||||||
|
print('=' * (self.columns - 1))
|
||||||
|
print(f"{'Name:':<19}{'Mirror:':<{self.mirror_alignment}}{'Score:':>12}")
|
||||||
|
print('=' * (self.columns - 1))
|
||||||
|
|
||||||
def view_the_title(self) -> None:
|
def view_the_title(self) -> None:
|
||||||
"""Print the title."""
|
"""Print the title."""
|
||||||
title: str = 'repositories information:'.title()
|
title: str = 'repositories information:'.title()
|
||||||
|
@ -140,10 +200,22 @@ class RepoInfo(Configs): # pylint: disable=[R0902]
|
||||||
def view_summary_of_repository(self) -> None:
|
def view_summary_of_repository(self) -> None:
|
||||||
"""Print the repository summary."""
|
"""Print the repository summary."""
|
||||||
print('=' * (self.columns - 1))
|
print('=' * (self.columns - 1))
|
||||||
print(f"{self.grey}Total {self.total_packages} packages available from the '{self.repository}' repository.\n")
|
if self.option_for_fetch:
|
||||||
|
print(f"{self.grey}Score {int(self.mirros_score[self.repository])} ms for repository "
|
||||||
|
f"'{self.repository}'.\n")
|
||||||
|
else:
|
||||||
|
print(f"{self.grey}Total {self.total_packages} packages available from the "
|
||||||
|
f"'{self.repository}' repository.\n")
|
||||||
|
|
||||||
def view_summary_of_all_repositories(self) -> None:
|
def view_summary_of_all_repositories(self) -> None:
|
||||||
"""Print the total summary of repositories."""
|
"""Print the total summary of repositories."""
|
||||||
print('=' * (self.columns - 1))
|
print('=' * (self.columns - 1))
|
||||||
|
if self.option_for_fetch:
|
||||||
|
slower_mirror: str = max(self.mirros_score, key=lambda key: self.mirros_score[key])
|
||||||
|
fastest_mirror: str = min(self.mirros_score, key=lambda key: self.mirros_score[key])
|
||||||
|
|
||||||
|
print(f"{self.grey}Fastest mirror is '{fastest_mirror}' and "
|
||||||
|
f"slower mirror is '{slower_mirror}'.\n")
|
||||||
|
else:
|
||||||
print(f"{self.grey}Total of {self.enabled}/{len(self.repos.repositories)} "
|
print(f"{self.grey}Total of {self.enabled}/{len(self.repos.repositories)} "
|
||||||
f"repositories are enabled with {self.total_packages} packages available.\n")
|
f"repositories are enabled with {self.total_packages} packages available.\n")
|
||||||
|
|
|
@ -49,7 +49,7 @@ class Usage(Configs):
|
||||||
f' slpkg [{self.cyan}COMMAND{self.endc}] [-d, download, -f, find, -w, view <packages>]\n'
|
f' slpkg [{self.cyan}COMMAND{self.endc}] [-d, download, -f, find, -w, view <packages>]\n'
|
||||||
f' slpkg [{self.cyan}COMMAND{self.endc}] [-s, search, -e, dependees, -t, tracking <packages>]\n'
|
f' slpkg [{self.cyan}COMMAND{self.endc}] [-s, search, -e, dependees, -t, tracking <packages>]\n'
|
||||||
f' slpkg [{self.yellow}OPTIONS{self.endc}] [-y, --yes, -c, --check, -O, --resolve-off]\n'
|
f' slpkg [{self.yellow}OPTIONS{self.endc}] [-y, --yes, -c, --check, -O, --resolve-off]\n'
|
||||||
f' slpkg [{self.yellow}OPTIONS{self.endc}] [-r, --reinstall, -k, --skip-installed]\n'
|
f' slpkg [{self.yellow}OPTIONS{self.endc}] [-r, --reinstall, -k, --skip-installed, -F, --fetch]\n'
|
||||||
f' slpkg [{self.yellow}OPTIONS{self.endc}] [-E, --full-reverse, -S, --search, -B, --progress-bar]\n'
|
f' slpkg [{self.yellow}OPTIONS{self.endc}] [-E, --full-reverse, -S, --search, -B, --progress-bar]\n'
|
||||||
f' slpkg [{self.yellow}OPTIONS{self.endc}] [-p, --pkg-version, -P, --parallel, -m, --no-case]\n'
|
f' slpkg [{self.yellow}OPTIONS{self.endc}] [-p, --pkg-version, -P, --parallel, -m, --no-case]\n'
|
||||||
f' slpkg [{self.yellow}OPTIONS{self.endc}] [-o, --repository=NAME, -z, --directory=PATH]\n'
|
f' slpkg [{self.yellow}OPTIONS{self.endc}] [-o, --repository=NAME, -z, --directory=PATH]\n'
|
||||||
|
@ -101,6 +101,8 @@ class Usage(Configs):
|
||||||
f' {self.yellow}-r, --reinstall{self.endc} Upgrade packages of the same version.\n'
|
f' {self.yellow}-r, --reinstall{self.endc} Upgrade packages of the same version.\n'
|
||||||
f' {self.yellow}-k, --skip-installed{self.endc} Skip installed packages during the building\n'
|
f' {self.yellow}-k, --skip-installed{self.endc} Skip installed packages during the building\n'
|
||||||
f'{"":>28}or installation progress.\n'
|
f'{"":>28}or installation progress.\n'
|
||||||
|
f' {self.yellow}-F, --fetch{self.endc} Fetch the fastest and slower mirror.\n'
|
||||||
|
f'{"":>28}To be used with repo-info command.\n'
|
||||||
f' {self.yellow}-E, --full-reverse{self.endc} Display the full reverse dependency.\n'
|
f' {self.yellow}-E, --full-reverse{self.endc} Display the full reverse dependency.\n'
|
||||||
f' {self.yellow}-S, --search{self.endc} Search and load packages using the dialog.\n'
|
f' {self.yellow}-S, --search{self.endc} Search and load packages using the dialog.\n'
|
||||||
f' {self.yellow}-B, --progress-bar{self.endc} Display static progress bar instead of\n'
|
f' {self.yellow}-B, --progress-bar{self.endc} Display static progress bar instead of\n'
|
||||||
|
|
Loading…
Reference in a new issue