Optimized list
This commit is contained in:
51
main.py
51
main.py
@@ -446,21 +446,35 @@ def get_selected_repos(show_all:bool,all_repos_list,identifiers=None):
|
|||||||
def list_repositories(all_repos, base_dir, bin_dir, search_filter="", status_filter=""):
|
def list_repositories(all_repos, base_dir, bin_dir, search_filter="", status_filter=""):
|
||||||
"""
|
"""
|
||||||
List all repositories with their attributes and status information.
|
List all repositories with their attributes and status information.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
all_repos (list): List of repository configurations.
|
all_repos (list): List of repository configurations.
|
||||||
base_dir (str): The base directory where repositories are located.
|
base_dir (str): The base directory where repositories are located.
|
||||||
bin_dir (str): The directory where executable wrappers are stored.
|
bin_dir (str): The directory where executable wrappers are stored.
|
||||||
search_filter (str): Filter for repository attributes (case insensitive).
|
search_filter (str): Filter for repository attributes (case insensitive).
|
||||||
status_filter (str): Filter for computed status info (case insensitive).
|
status_filter (str): Filter for computed status info (case insensitive).
|
||||||
|
|
||||||
For each repository, all attributes are printed and the computed status is always shown.
|
For each repository, the identifier is printed in bold, the description (if available)
|
||||||
|
in italic, then all other attributes and computed status are printed.
|
||||||
|
If the repository is installed, a hint is displayed under the attributes.
|
||||||
Repositories are filtered out if either the search_filter is not found in any attribute or
|
Repositories are filtered out if either the search_filter is not found in any attribute or
|
||||||
if the status_filter is not found in the computed status string.
|
if the status_filter is not found in the computed status string.
|
||||||
"""
|
"""
|
||||||
search_filter = search_filter.lower() if search_filter else ""
|
search_filter = search_filter.lower() if search_filter else ""
|
||||||
status_filter = status_filter.lower() if status_filter else ""
|
status_filter = status_filter.lower() if status_filter else ""
|
||||||
|
|
||||||
|
# Define status colors using colors not used for other attributes:
|
||||||
|
# Avoid red (for ignore), blue (for homepage) and yellow (for verified).
|
||||||
|
status_colors = {
|
||||||
|
"Installed": "\033[1;32m", # Green
|
||||||
|
"Not Installed": "\033[1;35m", # Magenta
|
||||||
|
"Cloned": "\033[1;36m", # Cyan
|
||||||
|
"Clonable": "\033[1;37m", # White
|
||||||
|
"Ignored": "\033[38;5;208m", # Orange (extended)
|
||||||
|
"Active": "\033[38;5;129m", # Light Purple (extended)
|
||||||
|
"Installable": "\033[38;5;82m" # Light Green (extended)
|
||||||
|
}
|
||||||
|
|
||||||
for repo in all_repos:
|
for repo in all_repos:
|
||||||
# Combine all attribute values into one string for filtering.
|
# Combine all attribute values into one string for filtering.
|
||||||
repo_text = " ".join(str(v) for v in repo.values()).lower()
|
repo_text = " ".join(str(v) for v in repo.values()).lower()
|
||||||
@@ -473,12 +487,12 @@ def list_repositories(all_repos, base_dir, bin_dir, search_filter="", status_fil
|
|||||||
repo_dir = get_repo_dir(base_dir, repo)
|
repo_dir = get_repo_dir(base_dir, repo)
|
||||||
status_list = []
|
status_list = []
|
||||||
|
|
||||||
# Check if the executable exists (installed).
|
# Check if the executable exists (Installed).
|
||||||
if os.path.exists(executable_path):
|
if os.path.exists(executable_path):
|
||||||
status_list.append("Installed")
|
status_list.append("Installed")
|
||||||
else:
|
else:
|
||||||
status_list.append("Not Installed")
|
status_list.append("Not Installed")
|
||||||
# Check if the repository directory exists (cloned).
|
# Check if the repository directory exists (Cloned).
|
||||||
if os.path.exists(repo_dir):
|
if os.path.exists(repo_dir):
|
||||||
status_list.append("Cloned")
|
status_list.append("Cloned")
|
||||||
else:
|
else:
|
||||||
@@ -492,13 +506,23 @@ def list_repositories(all_repos, base_dir, bin_dir, search_filter="", status_fil
|
|||||||
if os.path.exists(repo_dir) and not os.path.exists(executable_path):
|
if os.path.exists(repo_dir) and not os.path.exists(executable_path):
|
||||||
status_list.append("Installable")
|
status_list.append("Installable")
|
||||||
|
|
||||||
status_str = ", ".join(status_list)
|
# Build a colored status string.
|
||||||
|
colored_statuses = [f"{status_colors.get(s, '')}{s}\033[0m" for s in status_list]
|
||||||
|
status_str = ", ".join(colored_statuses)
|
||||||
|
|
||||||
# If a status_filter is provided, only display repos whose status contains the filter.
|
# If a status_filter is provided, only display repos whose status contains the filter.
|
||||||
if status_filter and status_filter not in status_str.lower():
|
if status_filter and status_filter not in status_str.lower():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Display repository details.
|
# Display repository details:
|
||||||
print(f"Repository: {identifier}")
|
# Print the identifier in bold.
|
||||||
|
print(f"\033[1m{identifier}\033[0m")
|
||||||
|
# Print the description in italic if it exists.
|
||||||
|
description = repo.get("description")
|
||||||
|
if description:
|
||||||
|
print(f"\n\033[3m{description}\033[0m")
|
||||||
|
print("\nAttributes:")
|
||||||
|
# Loop through all attributes.
|
||||||
for key, value in repo.items():
|
for key, value in repo.items():
|
||||||
formatted_value = str(value)
|
formatted_value = str(value)
|
||||||
# Special formatting for "verified" attribute (yellow).
|
# Special formatting for "verified" attribute (yellow).
|
||||||
@@ -507,11 +531,18 @@ def list_repositories(all_repos, base_dir, bin_dir, search_filter="", status_fil
|
|||||||
# Special formatting for "ignore" flag (red if True).
|
# Special formatting for "ignore" flag (red if True).
|
||||||
if key == "ignore" and value:
|
if key == "ignore" and value:
|
||||||
formatted_value = f"\033[1;31m{value}\033[0m"
|
formatted_value = f"\033[1;31m{value}\033[0m"
|
||||||
|
if key == "description":
|
||||||
|
continue
|
||||||
|
# Highlight homepage in blue.
|
||||||
|
if key.lower() == "homepage" and value:
|
||||||
|
formatted_value = f"\033[1;34m{value}\033[0m"
|
||||||
print(f" {key}: {formatted_value}")
|
print(f" {key}: {formatted_value}")
|
||||||
|
# Always display the computed status.
|
||||||
print(f" Status: {status_str}")
|
print(f" Status: {status_str}")
|
||||||
|
# If the repository is installed, display a hint for more info.
|
||||||
|
if os.path.exists(executable_path):
|
||||||
|
print(f"\nMore information and help: \033[1;4m{identifier} --help\033[0m\n")
|
||||||
print("-" * 40)
|
print("-" * 40)
|
||||||
|
|
||||||
|
|
||||||
# Main program.
|
# Main program.
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
config_merged = load_config()
|
config_merged = load_config()
|
||||||
|
|||||||
Reference in New Issue
Block a user