Added better config init
This commit is contained in:
46
main.py
46
main.py
@@ -371,17 +371,20 @@ def generate_alias(repo, bin_dir, existing_aliases):
|
|||||||
Generate an alias for a repository based on its repository name.
|
Generate an alias for a repository based on its repository name.
|
||||||
|
|
||||||
Steps:
|
Steps:
|
||||||
1. Remove vowels (a, e, i, o, u, case-insensitive) from the repository name.
|
1. Keep only consonants from the repository name (letters from BCDFGHJKLMNPQRSTVWXYZ, case-insensitive).
|
||||||
2. Truncate to at most 12 characters.
|
2. Collapse consecutive identical consonants into one.
|
||||||
3. If that alias conflicts (either already in existing_aliases or if a file exists in bin_dir),
|
3. Truncate to at most 12 characters.
|
||||||
|
4. If the alias conflicts (either already in existing_aliases or if a file exists in bin_dir),
|
||||||
then prefix with the first letter of provider and account.
|
then prefix with the first letter of provider and account.
|
||||||
4. If still conflicting, append a three-character hash (first 3 characters of md5 hex digest of repo name).
|
5. If still conflicting, append a three-character hash (from md5 of repository name) until free.
|
||||||
"""
|
"""
|
||||||
repo_name = repo.get("repository")
|
repo_name = repo.get("repository")
|
||||||
# Remove vowels from the repository name.
|
# Keep only consonants (remove vowels and non-letters)
|
||||||
base_alias = re.sub("[aeiouAEIOU]", "", repo_name)
|
consonants = re.sub(r"[^bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ]", "", repo_name)
|
||||||
# Truncate to maximum 12 characters.
|
# Collapse consecutive identical consonants
|
||||||
base_alias = base_alias[:12] if len(base_alias) > 12 else base_alias
|
collapsed = re.sub(r"(.)\1+", r"\1", consonants)
|
||||||
|
# Truncate to at most 12 characters (if longer, cut off)
|
||||||
|
base_alias = collapsed[:12] if len(collapsed) > 12 else collapsed
|
||||||
candidate = base_alias.lower()
|
candidate = base_alias.lower()
|
||||||
|
|
||||||
def conflict(alias):
|
def conflict(alias):
|
||||||
@@ -407,29 +410,36 @@ def generate_alias(repo, bin_dir, existing_aliases):
|
|||||||
|
|
||||||
def config_init(user_config, defaults_config, bin_dir):
|
def config_init(user_config, defaults_config, bin_dir):
|
||||||
"""
|
"""
|
||||||
Scan the base directory (defaults_config["base"]) for repositories. The folder structure is assumed to be:
|
Scan the base directory (defaults_config["base"]) for repositories.
|
||||||
|
The folder structure is assumed to be:
|
||||||
{base}/{provider}/{account}/{repository}
|
{base}/{provider}/{account}/{repository}
|
||||||
|
|
||||||
For each repository found, automatically determine:
|
For each repository found, automatically determine:
|
||||||
- provider, account, repository (from the folder names)
|
- provider, account, repository (from the folder names)
|
||||||
- verified: the latest commit (via 'git log -1 --format=%H')
|
- verified: the latest commit (via 'git log -1 --format=%H')
|
||||||
- alias: generated from the repository name (see generate_alias())
|
- alias: generated from the repository name using generate_alias()
|
||||||
|
|
||||||
Only new repositories (not already present in user_config["repos"]) are added.
|
Repositories already defined in defaults_config["repos"] are skipped.
|
||||||
|
Only new repositories (not already present in user_config["repos"] and not in defaults_config) are added.
|
||||||
"""
|
"""
|
||||||
base_dir = os.path.expanduser(defaults_config["base"])
|
base_dir = os.path.expanduser(defaults_config["base"])
|
||||||
if not os.path.isdir(base_dir):
|
if not os.path.isdir(base_dir):
|
||||||
print(f"Base directory '{base_dir}' does not exist.")
|
print(f"Base directory '{base_dir}' does not exist.")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Build a set of keys from defaults: (provider, account, repository)
|
||||||
|
default_keys = set()
|
||||||
|
for entry in defaults_config.get("repos", []):
|
||||||
|
key = (entry.get("provider"), entry.get("account"), entry.get("repository"))
|
||||||
|
default_keys.add(key)
|
||||||
|
|
||||||
# Build a set of keys for repositories already in the user config.
|
# Build a set of keys for repositories already in the user config.
|
||||||
existing_keys = set()
|
existing_keys = set()
|
||||||
for entry in user_config.get("repos", []):
|
for entry in user_config.get("repos", []):
|
||||||
key = (entry.get("provider"), entry.get("account"), entry.get("repository"))
|
key = (entry.get("provider"), entry.get("account"), entry.get("repository"))
|
||||||
existing_keys.add(key)
|
existing_keys.add(key)
|
||||||
|
|
||||||
# Also track aliases already used.
|
# Also track aliases already used in user config.
|
||||||
existing_aliases = set(entry.get("alias") for entry in user_config.get("repos", []) if entry.get("alias"))
|
existing_aliases = set(entry.get("alias") for entry in user_config.get("repos", []) if entry.get("alias"))
|
||||||
|
|
||||||
new_entries = []
|
new_entries = []
|
||||||
@@ -449,9 +459,9 @@ def config_init(user_config, defaults_config, bin_dir):
|
|||||||
if not os.path.isdir(repo_path):
|
if not os.path.isdir(repo_path):
|
||||||
continue
|
continue
|
||||||
key = (provider, account, repo_name)
|
key = (provider, account, repo_name)
|
||||||
if key in existing_keys:
|
if key in default_keys or key in existing_keys:
|
||||||
continue # Skip already configured repos.
|
continue # Skip if already defined in defaults or user config.
|
||||||
# Determine the latest commit (if it's a git repo).
|
# Determine the latest commit if it's a git repository.
|
||||||
try:
|
try:
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
["git", "log", "-1", "--format=%H"],
|
["git", "log", "-1", "--format=%H"],
|
||||||
@@ -485,7 +495,7 @@ def config_init(user_config, defaults_config, bin_dir):
|
|||||||
save_user_config(user_config)
|
save_user_config(user_config)
|
||||||
else:
|
else:
|
||||||
print("No new repositories found.")
|
print("No new repositories found.")
|
||||||
|
|
||||||
def edit_config():
|
def edit_config():
|
||||||
"""Open the user configuration file in nano."""
|
"""Open the user configuration file in nano."""
|
||||||
run_command(f"nano {USER_CONFIG_PATH}")
|
run_command(f"nano {USER_CONFIG_PATH}")
|
||||||
|
|||||||
Reference in New Issue
Block a user