# slpkg ChangeLog

## Version 6.1.6 - 21-May-2026
### Fixed
- **Fixed: `MAKEFLAGS` environment variable was set incorrectly**: In `sbo/slackbuild.py`, the value from `slpkg.toml` (e.g. `"-j4"`) was passed as `f"-j {self.makeflags}"`, producing `-j -j4` instead of `-j4`. Fixed by passing `self.makeflags` directly without prepending `-j `.
- **Fixed: `file-search` showed wrong installed status when multiple repositories contain the same package name**: The installed/uninstalled indicator was determined by package name only, so if `libreoffice` was installed from one repository, every other repository's `libreoffice` entry was also shown as `[installed]`. Fixed by comparing the full package filename (minus extension) against the exact log entry in `/var/log/packages/` instead of matching by name alone. (Reported in issue #209.)
- **Fixed: `return dependencies` from terminal selector**: If a package had only one dependency and that dependency was installed, the terminal selector would not return for less than 2 dependencies.

## Version 6.1.5 - 24-Apr-2026
### Fixed
- **Fixed: `file-search` returned no results on first `slpkg update`**: `MANIFEST.bz2` (required to build the `filelist.json.gz` index) was only downloaded if `CHECKSUMS.md5` already existed before the update run. On a fresh install or after adding a new repository, `CHECKSUMS.md5` was absent, so `has_manifest` evaluated to `False` and the manifest was never fetched — leaving `filelist.json.gz` missing and `file-search` always returning "Does not match any file." Fixed by downloading the base files (changelog, packages, checksums) first, then reading the freshly downloaded `CHECKSUMS.md5` to decide whether to fetch `MANIFEST.bz2` in a second pass.

## Version 6.1.4 - 27-Mar-2026
### Fixed
- **Fixed: non-root log redirect removed from `config.py`**: `config.py` was creating `~/.local/share/slpkg/` and redirecting `config.log` / `slpkg.log` there when run as a non-root user — a leftover from early development. Since slpkg requires root, these paths are no longer created. Non-root contexts (e.g. the test suite) now use `logging.NullHandler` instead.
- **Fixed: quiet-mode hang when installing packages with complex `doinst.sh`**: In quiet mode (progress bar active), `MultiProcess._run()` used `stdout=PIPE` to capture subprocess output. If any descendant process spawned by the installer's `doinst.sh` (e.g. a daemon forked during plugin cache generation) kept the pipe write-end open, the read loop in `_run()` blocked indefinitely — `anon_pipe_read` in the kernel stack. Fixed by replacing the PIPE with direct redirection to the process log file (or `DEVNULL` if logging is disabled), setting `stdin=DEVNULL` to prevent any child from reading the terminal, and passing `start_new_session=True` (`setsid`) to fully isolate the subprocess tree from slpkg's controlling terminal and process group. The spinner process (`process_2`) is now also explicitly joined after `terminate()` so the OS zombie is reaped before `process_and_log()` returns, preventing the `multiprocessing` atexit handler from blocking on cleanup.
- **Fixed: `PackageNotFoundError` when slpkg is not installed**: `version.py` now catches `PackageNotFoundError` from `importlib.metadata.version()` and falls back to `"unknown"` instead of raising an unhandled exception.

### Added
- **New flag: `upgrade -T/--ignore-tag`**: Ignores repository tags when scanning for upgradeable packages. Normally slpkg filters installed packages by the target repository's tag (e.g. only `_SBo`-tagged packages are checked when upgrading against the SBo repository). With `-T`, **all** installed packages are checked by name against the target repository regardless of their tag, allowing cross-repository upgrades (e.g. migrating a package installed from `alien` to a newer version in `slack`, or rebuilding from source via `ponce`/`SBo`). Respects `PACKAGE_METHOD` from `slpkg.toml`.
- **New flag: `upgrade -n/--install-new`**: Shows repository packages that are not yet installed alongside the normal upgrade candidates — equivalent to enabling the repository in `[NEW_PACKAGES] REPOSITORIES` in `repositories.toml`, but active only for the current run without modifying any configuration. Works with both single-repository upgrades and `-o all`.
- **New: mirror version check during `slpkg update`**: Before syncing repositories, `slpkg update` now warns if any enabled repository mirror URL does not match the installed Slackware version. The check reads `/etc/slackware-version` — a `+` suffix indicates current, no suffix indicates stable — and compares it against a version hint embedded in the mirror URL (`current` or a version number such as `15.0`). Mirrors with no recognisable hint are silently skipped. Controlled by the new `MIRROR_VERSION_CHECK` key in the `[behavior]` section of `/etc/slpkg/slpkg.toml` (default: `true`).

### Updated
- **Updated: `slpkg list` now shows blacklisted packages**: Blacklisted packages were previously hidden from `slpkg list` output. They are now displayed with a `(blacklisted)` label so users can see all installed packages regardless of blacklist status.
- **Updated: `slpkg list` argument is now optional**: Running `slpkg list` without arguments lists all installed packages, equivalent to `slpkg list "*"`.

## Version 6.1.3 - 20-Mar-2026
### Fixed
- **Fixed: `slpkg upgrade -o all` ignored new packages from `[NEW_PACKAGES]`**: When `[NEW_PACKAGES] REPOSITORIES` was configured (e.g. `["slack"]`), running `slpkg upgrade` correctly listed uninstalled repository packages as `← Add New Package`, but `slpkg upgrade -o all` silently omitted them. The cause was that `all_repos.py` `_load_packages()` filtered out every package name ending with `_Added.` (the internal marker used by `Upgrade.packages()` for new-package candidates). Fixed by stripping the `_Added.` suffix and including those packages in the combined selection list, matching the behaviour of the single-repository upgrade path in `runner.py`. `_Removed.` packages (the `[REMOVE_PACKAGES]` feature) continue to be excluded from the all-repos pass as before.
- **Fixed: new packages appeared last in `slpkg upgrade -o all` selection list**: When `[NEW_PACKAGES]` was configured for a repository (e.g. `slack`), uninstalled packages (shown as `← Add New Package`) were appended after all upgrade candidates in the combined chooser. They now appear first, matching the `slackpkg install-new` → `upgrade-all` workflow recommended by Patrick Volkerding. Fixed in `all_repos.py` `_load_packages()` by collecting new (`_Added.`) and upgrade packages into separate lists and prepending the new ones.

## Version 6.1.2 - 16-Mar-2026
### Updated
- **Refactored: `main.py` split into three focused modules**: The single 2 450-line `slpkg/main.py` has been decomposed into three files with clear responsibilities:
  - `slpkg/runner.py` — contains `class Run` with all command-execution methods (`install`, `upgrade`, `search`, `remove`, etc.), the lock-acquisition logic (`_acquire_lock`), and all kernel-upgrade / reboot-prompt helpers.
  - `slpkg/cli_parser.py` — contains all argument-parser infrastructure: `SlpkgParser`, `CustomCommandsFormatter`, `SubCommandFormatter`, `_COMMAND_CATEGORIES`, `_EPILOG_BASE`, `_EPILOG_MAIN`, `_collect_subparser_info`, `_print_category_help`, and the top-level `build_parser()` factory.
  - `slpkg/main.py` — reduced to a thin entry point (~350 lines): logging initialisation, `check_for_repositories()`, `main()` dispatch, and the `__main__` block.
  - No user-visible behaviour change; import chain has no circular dependencies.
- **Refactored: `main()` command dispatch replaced with dictionary**: The long `if/elif` chain (~80 lines) has been replaced with a single `dispatch: dict[str, Callable[[], Any]]` built with `dict.fromkeys` for alias grouping. Command lookup is now O(1) and aliases share the same callable without repetition.
- **Refactored: test suite split to match the new module structure**: `tests_pytest/test_main.py` now covers only `check_for_repositories()` and `main()` dispatch logic. Two new test files have been added:
  - `tests_pytest/test_runner.py` — 101 tests for `class Run`: lock acquisition (no-lock skip, successful lock, EAGAIN/other-error exit), `is_file_list_packages`, and all 43 public methods across install, upgrade, search, remove, verify, history, orphans, mark, pin, why, blacklist, repo, stats, rollback, changelog, rebuild, reinstall, health-check, audit, and more.
  - `tests_pytest/test_cli_parser.py` — 28 tests for `_COMMAND_CATEGORIES`, epilog strings, `SlpkgParser.error` custom message, `build_parser()` structure and argument parsing, `_collect_subparser_info`, `_print_category_help` output, `CustomCommandsFormatter` and `SubCommandFormatter` initialisation.
- **Refactored: `downloader.py` `check_if_downloaded`**: Replaced deep nested `if/elif` structure with early returns and extracted the fallback execution into a dedicated `_attempt_fallback_download()` method. The `downloader_func` is now validated before constructing the fallback URL. A `try/except` around `multi_process.process()` ensures that exceptions during the fallback download are caught and handled rather than silently skipping the re-check.
- **Updated: `CONTRIBUTING.md`**: Replaced `ruff` with `flake8` and `pylint` in the development setup and code style sections.

### Fixed
- **Fixed: ANSI escape codes appeared as literal text in `--dialog` checklist when using `-o all`**: When running `slpkg upgrade -o all --dialog` (or `install -o all --dialog`), every package line showed the repository name surrounded by raw escape sequences (`^[[96m` / `^[[0m`) instead of plain text. The cause was that `all_repos.py` embedded `self.cyan` / `self.endc` ANSI codes directly inside the qualified package keys (e.g. `"vlc [\033[96malien\033[0m]"`). These keys were passed as the dialog checklist **tag** field; the `dialog` utility does not interpret ANSI codes (only its own `\Z` notation), so the bytes appeared literally. Fixed by using plain keys (`"vlc [alien]"`) throughout `_build_combined_data` and `_dep_display`. (Reported in issue #206.)

## Version 6.1.1 - 13-Mar-2026
### Added
- **New: File Locking mechanism**: Implemented a global exclusive lock using `/var/run/slpkg.lock` (via `fcntl.flock`) to prevent multiple instances of `slpkg` from running simultaneously. This ensures data integrity by avoiding race conditions during repository updates, package installations, or builds. If another instance is detected, the program exits with a clear error message.
- **New flag: `--no-lock`**: Added a global option to disable the process locking mechanism. This allows users to run multiple instances of `slpkg` simultaneously (e.g., for multiple search or info operations). The flag is available as a global option (`slpkg --no-lock <command>`) and for all subcommands that support the `--debug` flag.

### Updated
- **Updated: Terminal clear now uses ANSI escape sequence instead of `os.system("clear")`**: All four dialog-cleanup call sites (`config_editor.py`, `remove_packages.py`, `choose_packages.py`, `choose_dependencies.py`) now emit `\033[2J\033[H` directly via `print()`. The escape sequence is stored as `Config.clear_screen` in `config.py` (alongside the other terminal codes) and accessed through `config_load`. This removes the `os.system()` subprocess spawn, avoids a shell fork, and is consistent with how `terminal_selector.py` already clears the screen.
- **Updated: Lock error message**: When another instance of `slpkg` is already running, the error message now suggests using the `--no-lock` flag if the user wants to skip the process lock.

### Security
- **Security: Replaced `shell=True` with `shell=False`** in `multi_process.py` (`_run()` and `process()`): subprocess calls now use `shlex.split()` to parse the command string and pass a list of arguments directly to the OS, eliminating the intermediate shell. This prevents shell metacharacters (`;`, `&`, `|`, `$()`, backticks) in external data such as repository URLs or filenames from being interpreted as shell commands (command injection). The GPG key fetch in `update_repositories.py` was also converted to list-form (`["gpg", "--fetch-key", url]`) with `shell=False`.
- **Security: Downloader commands now built as `list[str]`**: The four `set_*_downloader()` methods in `downloader.py` (`wget`, `curl`, `aria2c`, `lftp`) now return `list[str]` instead of a shell-interpolated string. Each argument (tool name, options via `shlex.split()`, URL, output path) is a separate token passed directly to the OS — URLs or filenames containing spaces or special characters are never misinterpreted. `MultiProcess.process()` was updated to accept `list[str] | str` (lists are used as-is; strings fall back to `shlex.split()`). The git clone and lftp mirror commands in `update_repositories.py` were similarly converted to list form.

### Fixed
- **Fixed: blacklist regex patterns (e.g. `^package$`) were silently ignored**: The `re.escape()` call introduced in 6.0.0 to handle package names containing literal `+` characters (e.g. `gtk+2`, `libsigc++`) also escaped regex metacharacters such as `^` and `$`, turning `^akonadi$` into `\^akonadi\$` — a pattern that can never match a package name. Fixed by introducing `_blacklist_pattern()` in `utilities.py`: entries that contain unambiguous regex metacharacters (`^`, `$`, `*`, `?`, `[`, `(`) are used as-is; all other entries are passed through `re.escape()` for literal substring matching. Both plain names (`gtk+2`) and anchored patterns (`^akonadi$`, `^kde.*`) now work correctly. (Reported in issue #204.)

## Version 6.1.0 - 07-Mar-2026
### Added
- **New command: `reinstall` (aliases: `re`, `rein`)**: Reinstalls one or more already-installed packages by fetching and rebuilding (or re-downloading) them from their source repository. The repository is detected automatically from the tag embedded in the installed package filename (e.g. `_SBo` → `sbo`, `alien` → `alien`; no tag → `slack`). Use `-o NAME` to override the auto-detected repository. Dependencies are resolved and presented for interactive selection by default; use `-N/--no-resolve` to skip them. Supports `-e/--edit` to open a SlackBuild before building and `-T/--repo-tag` to assign a custom tag (SBo/Ponce only). Also supports `-P/--parallel`, `-q/--quiet`, `-y/--yes`, `-S/--select`, `-D/--dialog`, and `-i/--ignore-case`.
- **New command: `repo` (aliases: `rp`, `rep`)**: Manages repository configuration in `/etc/slpkg/repositories.toml` without requiring a text editor. Running `slpkg repo` with no options prints a table of all known repositories showing their enabled/disabled status, mirror URL, and a `*` marker on the default repository. Use `--enable NAME [NAME ...]` to enable one or more repositories, `--disable NAME [NAME ...]` to disable them, `--mirror NAME URL` to change the mirror URL for a repository, `--default NAME` to set the default repository (updates `[DEFAULT] REPOSITORY` in the TOML file), `-q/--quiet` to list repository names only (one per line, no table), `--priority [NAME ...]` to set or show the repository priority order used by `upgrade -o all` and `install -o all` (updates `[ALL_REPOS] PRIORITY`; calling `--priority` with no arguments shows the current priority list), and `--clear-priority` to explicitly clear the priority list. All changes are written back with [`tomlkit`](https://github.com/sdispater/tomlkit), preserving the original file formatting, ordering, and comments. Repository names are matched case-insensitively. After enabling a repository or changing its mirror, run `slpkg update` to refresh the package database.
- **New: `slpkg upgrade -o all` / `slpkg install <pkg> -o all`**: A unified all-repositories mode powered by the new `all_repos.py` module. Both commands accept `all` or `"*"` as the `-o/--repository` argument.
  - **`upgrade -o all`**: Upgrades installed packages from all priority-enabled repositories in a single interactive pass. Repositories are processed in the order defined by `PRIORITY` in the `[ALL_REPOS]` section of `repositories.toml`. If the same package is found in more than one repository, the first in `PRIORITY` order wins; a warning listing only the packages the user actually selected (not all cross-repo conflicts) is shown before the confirmation prompt.
  - **`install <pkg> -o all`**: Searches all enabled repositories for packages matching the given name(s), presents them in a combined selector, resolves dependencies, and installs. If the same package is found in multiple repositories, all versions appear in the selector as qualified entries (e.g. `vlc [alien]`, `vlc [slack]`) so the user can choose which to install.
  - **Both modes**: The terminal selector displays each package and dependency with a cyan `[repo]` suffix so the source repository is always visible. `--check`/`--dry-run` shows the full install/upgrade summary and then exits without downloading or installing anything. SBo/Ponce repos always run in a separate pass (build environment is repo-specific); binary repos are merged into a single download+install pass when only one confirmation is needed. A single `Finished:` timer is printed at the end regardless of how many repositories were processed.
- **New config section `[ALL_REPOS]` in `repositories.toml`**: Replaces the old per-repository `PRIORITY = 0/1/2` integers. The section contains a single `PRIORITY` list of repository names (case-insensitive) in the desired upgrade order. Example: `PRIORITY = ["ponce", "alien"]`. Repositories not listed are excluded from `upgrade -o all`.
- **New: `-o all` as alias for `-o "*"`**: The special value `all` is now accepted wherever `-o/--repository` is used, as a shell-quoting-free alternative to `"*"`. Both forms are equivalent and can be used with any command that accepts `-o` (e.g. `slpkg upgrade -o all`, `slpkg search -o all firefox`, `slpkg list -o all`).
- **New flag: `upgrade --repos-priority NAME [NAME ...]`**: Overrides the `[ALL_REPOS] PRIORITY` order for a single run without modifying `repositories.toml`. Only the listed repositories are processed (filtered to enabled ones). Takes precedence over the persistent `PRIORITY` list. Use `slpkg repo --priority` for a permanent change.
- **New config key `ALL_REPOS_CONFIRM`** (in `[behavior]` section of `slpkg.toml`): Controls when the confirmation prompt is shown during `upgrade -o all`. Set to `"once"` (default) to ask once for all repositories, or `"per_repo"` to ask separately before each repository.
- **New flag: `config --validate`**: Validates `/etc/slpkg/slpkg.toml` for syntax and value errors without opening an editor. Reports unknown sections or keys (warnings), missing keys (warnings, defaults will be used), wrong-type values, invalid enum choices (`LOGGING_LEVEL`, `DOWNLOADER`, `PROGRESS_SPINNER`, `SPINNER_COLOR`, `ALL_REPOS_CONFIRM`), and out-of-range numeric values (`MAXIMUM_PARALLEL`, `URLLIB_TIMEOUT`). Exits with status 0 if the file is usable (no errors), or 1 if errors are found.
- **New flag: `verify -f/--fix`**: After the integrity check completes, automatically reinstalls all packages that have missing files.
- **New flag: `history --package NAME`**: Filters the history output to show only entries for the specified package name (case-insensitive). The header displays the package name for clarity. Can be combined with `-n` to limit results (e.g. `slpkg history --package ffmpeg -n 5`). The source repository is detected from the installed package tag (same logic as `reinstall`). Packages whose repository cannot be determined are skipped with a warning. Combine with `-y/--yes` to skip the confirmation prompt (e.g. `slpkg verify --fix -y`).
- **Reboot prompt after kernel upgrade**: After a kernel upgrade is detected, slpkg now asks whether to reboot immediately. The prompt respects `ASK_QUESTION` (skipped if false) and `-y/--yes` (auto-confirms). Default answer is **N** — the user must explicitly choose to reboot. The bootloader update step (if `BOOTLOADER_COMMAND` is configured) runs first, then the reboot prompt follows.
- **Extended flag: `-c/--check` (alias `--dry-run`)**: The existing dry-run flag is now available on two additional commands — `install` and `remove` — and accepts `--dry-run` as an alternative spelling. Behaviour per command:
  - `update --check`: checks whether remote repositories have new content without syncing.
  - `upgrade --check` / `upgrade --dry-run`: lists packages that would be upgraded/removed without applying changes.
  - `rebuild --check` / `rebuild --dry-run`: lists packages that would be rebuilt without performing any build.
  - `install --check` / `install --dry-run`: resolves dependencies, shows the full install/dependency table, then exits without downloading or installing anything.
  - `remove --check` / `remove --dry-run`: resolves dependencies, shows the full remove table, then exits without removing anything.
- **New flag: `changelog --date YYYY-MM-DD`**: Restricts changelog output to entries from a single date block. Applies before query filtering and line limiting, so `-Q`, `-n`, `-g`, and `-s` all work as expected within the selected date. If the date is not found in the changelog, a hint is displayed. Compatible with all other `changelog` flags.
- **New flag: `changelog -s/--short`**: Prints a compact grouped summary of the changelog. Output is organised by date: each date appears once as a header in the form `[YYYY-MM-DD]`, followed by one indented line per package entry (`  package.txz: Action.`). Directory prefixes (e.g. `a/`, `l/`, `testing/packages/`) are stripped; indented multi-line descriptions are omitted; multi-word action text such as `Upgraded.  (* Security fix *)` is preserved on the same line. A blank line separates consecutive date groups. The `-n N` flag counts package lines only (date headers and blank separators are not counted). Respects the `-Q/--query` filter and is compatible with the `-o/--repository` selector. Mutually exclusive with `-e/--edit` and `-g/--pager`.
- **New flag: `-j/--json`** — Machine-readable JSON output for scripting and tooling, now supported by seven commands:
  - `list --json`: array of objects with `package`, `name`, `version`, `arch`, `build`, `tag`, `size_bytes`.
  - `info --json`: array of objects with full package metadata (repository, name, version, build, homepage, sources, md5sum, requires, description, README, etc.).
  - `search --json`: array of objects with `repository`, `name`, `version`, `installed` (boolean).
  - `history --json`: array of objects with `timestamp`, `date`, `time`, `action`, `name`, `version`, `repository`. Respects `--package` and `-n` filters.
  - `repo --json`: array of objects with `name`, `enabled` (boolean), `default` (boolean), `mirror`.
  - `repo-info --json`: array of objects with `name`, `enabled` (boolean), `default` (boolean), `last_updated`, `packages` (count), `mirror`. Respects `-o REPO` for single-repository output.
  - `stats --json`: previously inline; now uses the shared `json_parser` parent (no user-visible change).
- **Enhanced: `changelog -Q/--query` now accepts Python regex patterns**: The query argument is compiled as a case-insensitive regular expression, replacing the previous plain substring match. Plain text queries (e.g. `ffmpeg`) continue to work unchanged — they are valid regex patterns. Regex meta-characters now unlock richer filtering: `kernel.*generic` (both words in sequence), `upgrade|remove` (alternation), `^a/` (anchor to category prefix), `openssl-3\.4` (exact version match with escaped dot). If the supplied pattern is not valid regex, slpkg prints an error with a tip to escape special characters and exits with status 1.
- **New option `M`(erge) in `slpkg_new-configs`**: Adds a smart merge action alongside the existing Keep/Overwrite/Remove/Prompt options. Choosing `M` (globally or per-file via `P`) computes a full diff between the existing config and the incoming `.new` file: new keys/sections not present in the current config are shown as additions (`+`), and obsolete keys/sections no longer present in the new file are shown as removals (`-`). The diff is printed before asking for confirmation (`Y/N`). If confirmed, `tomlkit` is used to apply both additions and removals while preserving all user-customised values. The current file is backed up to `.orig` before writing, and the `.new` file is renamed to `.new.orig` after a successful merge. If no changes are detected the current file is left untouched and an "already up-to-date" message is shown. If the user cancels (`N`) the file is not modified. The option is available for all three config files (`slpkg.toml`, `repositories.toml`, `blacklist.toml`).

### Fixed
- **Fixed: `-o/--repository` not usable before the subcommand (issue #202)**: The `-o/--repository` flag is now also accepted as a global argument before the subcommand, enabling repo-specific shell aliases such as `alias sbopkg="slpkg -o sbo"` followed by `sbopkg install <pkg>`. If `-o` is supplied both globally and per-subcommand, the per-subcommand value takes precedence. Shell completion (`shell_completion.py`) updated to correctly suggest subcommands after global flags (e.g. `slpkg -o sbo <TAB>`).
- **Fixed: `slpkg upgrade` fails with "deps.log not found" on fresh install (issue #203)**: On a system where no packages had been installed via slpkg yet, `deps.log` did not exist and `remove_packages.py` called `read_json_file()` unconditionally, causing a hard exit. `config.py` now initializes all expected log files (`deps.log`, `marks.log`, `pins.log`, `history.log`) with empty defaults during startup if they do not already exist. `remove_packages.py` additionally guards the `read_json_file()` call with an `is_file()` check as a second layer of protection.

### Updated
- **Updated: `stats` command — disk usage per repository**: The output now includes a second bar chart, **Disk usage per repository**, sorted by uncompressed size descending (the existing chart remains sorted by package count). Each row shows the uncompressed footprint and its percentage of the total installed disk usage. Sizes are read from the `UNCOMPRESSED PACKAGE SIZE` header in `/var/log/packages/` (a single line parse per package) instead of stat()-ing every installed file, making the command significantly faster on systems with many packages. The `--json` output already contained per-repo size data and is unchanged.
- **Updated: `configs/repositories.toml`**: Added `[ALL_REPOS]` section with `PRIORITY = []` default and descriptive comments. Removed the obsolete per-repository `PRIORITY` integer field.
- **Updated: `configs/slpkg.toml`**: Added `ALL_REPOS_CONFIRM = "once"` key to the `[behavior]` section.
- **Updated: `configs/slpkg.toml`**: Added three new keys to the `[verification]` section: `VERIFY_SKIP_VIRTUAL` (default: `["dev/", "proc/", "sys/", "run/"]`), `VERIFY_SKIP_PREFIXES` (default: `["install/"]`), and `VERIFY_SKIP_SUFFIXES` (default: `[".new", ".sample"]`). These replace the previously hardcoded skip lists in `verify_files.py` and allow users to customize which paths and suffixes are excluded from the `slpkg verify` integrity check. Useful for runtime-generated files such as virus databases (e.g. `/var/lib/clamav/`) that are absent after a fresh install but are not actually missing.

### Renamed
- **Renamed: `rebuild-sbo` → `rebuild`** (aliases: `rbd`, `rbld`): The command now exclusively supports SBo and Ponce repositories (source-based rebuild). For binary repositories, use `reinstall` instead. The old aliases `rs`/`rsbo` are replaced by `rbd`/`rbld` to reflect the new name.

## Version 6.0.0 - 06-Mar-2026
### Added
- **Added: New `history` command** (aliases: `hi`, `hst`): Displays a chronological log of all package operations performed by slpkg — installs, upgrades, reinstalls, builds, and removals — grouped by date and colour-coded by action type. Each entry records the timestamp, action, package name, version, and repository. Entries are stored in `/var/log/slpkg/history.log` as an append-only structured log file that persists across sessions. Supports `-n N` to limit output to the last N entries.
- **New flag: `history -x/--clear`**: Deletes the history log file at `/var/log/slpkg/history.log`. Requires root. Cannot be combined with `-n`.
- **New command: `mark` (aliases: `mk`, `mrk`)**: Marks one or more packages as manually installed, permanently exempting them from the `orphans` list. Useful when a package was originally installed as a dependency but the user wants to keep it directly. Marks are stored in `/var/log/slpkg/marks.log` as a sorted JSON list. Run `slpkg mark` with no arguments to list all marked packages. Use `--unmark` to remove the mark and let the package become a candidate for `orphans` again.
- **New command: `orphans` (aliases: `or`, `orp`)**: Lists installed packages that were tracked as dependencies but are no longer required by any currently installed top-level package. Reads `/var/log/slpkg/deps.log` to determine which packages are still needed. Supports `-q/--quiet` for machine-readable output (one name per line) and `-A/--autoremove` to remove all orphaned packages in one step (add `-y` to skip the confirmation prompt). If the log file is missing or empty, no orphans are reported.
- **New command: `why` (aliases: `w`, `wy`)**: Shows which currently installed packages depend on a given package. Reads `/var/log/slpkg/deps.log` and reports all installed packages that list the given package as a dependency. Accepts one or more package names. Supports `-q/--quiet` for machine-readable output and `-t/--transitive` to follow the dependency chain upward recursively, displaying the full ancestor tree with Unicode/ASCII tree connectors and a direct/transitive summary.
- **New command: `list-files` (aliases: `lf`, `lfl`)**: Lists all files installed by one or more packages. Reads the `FILE LIST` section from `/var/log/packages/<package>` and prints each installed file path (directories and `install/` scripts are excluded). Supports `-q/--quiet` for bare path output (one line per file, suitable for piping) and `-i/--ignore-case` for case-insensitive package name lookup. The normal output shows a header with the full package name, all file paths, and a total file count.
- **Improved: `search` command -q/--quiet support**: Added support for the `-q/--quiet` flag to the `search` command. When used, it prints only the matching package names, one per line, without headers, status indicators, or summaries — making it suitable for scripting and piping.
- **New command: `pin` (aliases: `pn`, `pnh`)**: Pins one or more packages to prevent them from being upgraded by `slpkg upgrade`. Pinned packages remain installed and visible but are silently skipped during upgrades. Without arguments, lists all currently pinned packages with their installed version. Use `--unpin` to remove the pin and allow upgrades again. Pins are stored in `/var/log/slpkg/pins.log` as a sorted JSON list. The `upgrade --check` output shows pinned packages in grey with a `pinned (skipped)` note in the summary line.
- **New command: `check-broken` (aliases: `cb`, `cbr`)**: Scans `/var/log/slpkg/deps.log` and reports packages whose tracked dependencies are no longer installed. For each broken package, lists the missing dependency names. Supports `-q/--quiet` for machine-readable output (one package name per line). Packages installed outside slpkg or without dependencies are not affected.
- **New command: `clean-system` (aliases: `cs`, `csy`)**: Identifies and optionally removes packages that are installed on the system but do not exist in any currently enabled repository. This is useful for finding "foreign" or "alien" packages. Supports `-q/--quiet` for bare package names output and `-A/--autoremove` to remove all foreign packages in one step (add `-y` to skip the confirmation prompt).
- **New command: `export` (aliases: `ex`, `exp`)**: Exports a list of all manually installed packages (not installed as dependencies, or explicitly marked) to a `.pkgs` file. This list can be used with `slpkg install` to replicate the system on another machine. Supports `-n/--no-deps` to produce a bare package list without dependency comments.
- **New command: `audit` (aliases: `ad`, `adt`)**: Scans installed packages for known security vulnerabilities (CVEs) using the OSV (Open Source Vulnerabilities) API. Provides a summary of affected packages and vulnerability details. Supports optional package names and pattern matching.
- **New command: `import` (aliases: `im`, `imp`)**: Processes a `.pkgs` file, validates the packages across all enabled repositories, and provides a summary of required repositories and missing packages before initiating a bulk installation.
- **New command: `health-check` (aliases: `hc`, `hchk`)**: Scans installed ELF binaries and shared libraries using `ldd` to identify broken shared library links. Maps problematic files to their owner packages to help identify items needing rebuilds. Supports optional package names or patterns (wildcards) to scan specific items; if omitted, the entire system is checked.
- **New command: `stats` (aliases: `st`, `stt`)**: Displays system-wide installation statistics, providing package counts and disk usage distribution across all active repositories (slack, SBo, etc.) with a visual ASCII bar chart summary.
- **New command: `rollback` (aliases: `rb`, `und`)**: Attempts to undo the last batch of package operations (transaction) based on the history log. Automatically removes last-installed packages or reinstalls last-removed ones.
- **New command: `install-pkg` (aliases: `ip`, `ipkg`)**: Installs one or more local Slackware package files (`.txz`, `.tgz`, `.tlz`, `.tbz`) directly, bypassing repository lookup and dependency resolution. Each path is validated before proceeding. The install command is controlled by the `LOCAL_INSTALLPKG` configuration key (defaults to `installpkg`). If the `-r/--reinstall` flag is given, `upgradepkg --reinstall` is used regardless of the current installation state. Supports `-y/--yes` to skip the confirmation prompt. All successful operations are logged to `/var/log/slpkg/history.log` with repository field set to `local`.
- **File path completion for local installs**: The `install-pkg` (aliases: `ip`, `ipkg`) command now supports full file and directory path completion in both Bash and Zsh, powered by a new `get_file_completions` helper in the Python completion script.
- **Smart shell completion for `blacklist`**: When using `slpkg blacklist --remove` (or `-r`), the completion system now suggests only packages that are currently in the blacklist. When adding packages, it suggests installed packages.

- **New environment variable: `SLPKG_REPO`**: Sets the active repository for the current shell session without editing `repositories.toml`. Takes precedence over `DEFAULT_REPOSITORY` in `repositories.toml` but is overridden by the `-o/--repository` flag. Example: `export SLPKG_REPO=ponce`.
- **New config key: `LOCAL_INSTALLPKG`** (in `[commands]` section of `slpkg.toml`): Controls which command `slpkg install-pkg` uses to install local package files. Defaults to `"installpkg"` — the standard Slackware install tool. Change to `"upgradepkg --install-new"` to use upgradepkg behaviour. Previously `install-pkg` shared the `INSTALLPKG` variable with repository-based operations.
- **New flag: `verify -q/--quiet`**: Prints only the names of packages with missing files, one per line. No file details or summary. Suitable for scripting (e.g. `slpkg verify -q | xargs slpkg remove`).
- **New flag: `depends -q/--quiet`**: Prints a flat list of all dependency names (direct and transitive), one per line, with no tree formatting or summary.
- **New flag: `reverse -q/--quiet`**: Prints dependee names one per line. Without `-F`, prints direct dependees only; with `-F`, prints all transitive names as well.
- **New flag: `pin -q/--quiet`**: When listing pins (no arguments), prints only the pinned package names, one per line.
- **New flag: `mark -q/--quiet`**: When listing marks (no arguments), prints only the marked package names, one per line.
- **New flag: `changelog -n/--lines N`**: Limits the changelog output to the first `N` lines of the file (most recent entries, since changelogs are newest-first). Can be combined with `-Q` to filter within a line window. Without `-n`, all lines are shown as before.

### Improved
- **Improved: `slpkg help` menu**: Commands are now grouped into five categories — Repository, Packages, Query, Dependencies, System — making the main help page easier to scan. The option-column width is calibrated to the longest command name so descriptions start with a consistent 2-character gap. Subcommand help pages (e.g. `slpkg install -h`) use a wider column to prevent the `-C <ON/OFF>, --color <ON/OFF>` option from wrapping its description to the next line. Description text always wraps within the description column and never bleeds below the flag name.
- **Improved: `--quiet` processing header**: Replaced the verbose `"Started the processing of (N) packages:"` message with the cleaner `"Processing N packages:"` (and `"Removing N packages:"` for removals), followed by an adaptive separator line that matches the terminal width.
- **Improved: `--quiet` pacman-style counter**: Each progress line now shows a `(n/N)` counter where `N` is the total number of packages. The build and install steps of the same package share the same counter number (e.g. both show `(1/5)`), consistent with how pacman counts packages rather than individual operations. A blank line separates each package's build+install pair for visual clarity.
- **Improved: `--quiet` adaptive terminal layout**: Progress lines, filename truncation, and the separator now dynamically adapt to the actual terminal width at runtime instead of being fixed at 79 columns. Narrow terminals truncate the filename to avoid line wrapping; wide terminals use the extra space.
- **Improved: `reverse` tree-style output**: Direct reverse dependencies are now displayed using Unicode box-drawing connectors (`├─` / `└─`). The `-F/--full-reverse` flag now builds a complete recursive reverse-dependency tree showing all packages that transitively require the specified package, indented by level, with a `N direct, M transitive` summary line.
- **Improved: `depends` tree-style output**: Dependencies are now displayed as a hierarchical tree instead of a flat list. Each node shows a direct dependency of its parent; sub-dependencies are indented beneath their parent using tree connectors. Dependencies not found in the repository are highlighted in red. A `N direct, M transitive` summary line is shown at the end.
- **Improved: Unicode detection**: Added automatic detection of stdout encoding at startup (`config.unicode`). Status symbols `[ ✓ ]` and `[ ✗ ]` are used on UTF-8 terminals; ASCII fallbacks `[ + ]` and `[ ! ]` are used on non-Unicode terminals.
- **Improved: `PackageValidator` error messages**: Replaced the generic `"Unable to find a match: foo"` with distinct, context-specific messages: `"Package not found: foo"` when the package does not exist in the repository, and `"Package not installed: foo"` when the package is not installed on the system.
- **Blacklist visibility in error messages**: The `PackageValidator` now appends a red `(blacklisted)` tag to error messages when a package is not found or not installed but exists in the user's blacklist. This applies to most package-management commands.
- **Blacklist awareness in local installations**: `slpkg install-pkg` now identifies and highlights blacklisted packages in the installation summary and displays a warning message before proceeding.
- **Consistent validation for `pin` and `mark`**: These commands now use the central `PackageValidator` for input verification. They will stop with a standard error message (including blacklist status) if a package is not installed, rather than silently skipping it.
- **Categorized shell completion**: Subcommands are now categorized into repository-based, installed-package-based, and local-file-based groups. Commands like `remove`, `list`, `verify`, `mark`, `pin`, and `why` now correctly suggest only installed packages, reducing noise and improving performance.

### Refactored
- **Code quality improvements across all modules**: Applied idiomatic `pathlib` usage throughout (replaced `open()` with `Path.read_text()` / `Path.write_text()` / `path.open()`, and `os.path.*` calls with the `/` operator and `.exists()` / `.name` / `.stat()`). Modernised type annotations project-wide: added `from __future__ import annotations` where missing, replaced `Optional[X]` / `Union[X, Y]` with `X | None` / `X | Y` syntax, and removed the now-redundant `Optional`, `Union`, `Any`, `Tuple`, `Set`, and `Dict` typing imports. Improved logging by applying `', '.join()` to all list/tuple logger arguments instead of passing raw collections. Removed dead code (unreachable guards, unused imports, commented-out blocks), redundant intermediate variables, and self-evident inline comments. Fixed several correctness bugs: `ignore_packages()` now applies `re.escape()` to prevent regex metacharacters in package names (e.g. `gtk+2`) from breaking patterns; `upgrade.py` resets `installed_packages` before each reload to prevent list accumulation; `self_check.py` adds a missing `return` after `InvalidVersion` so the comparison is not reached with sentinel values; `search.py` excludes ANSI escape codes from `len()` to fix terminal misalignment.

### Updated
- **Updated: `REPOSITORIES.md`**: Fixed incorrect conraid repository URL (`slack.conraid.net` → `slackers.it`).
- **Updated: `README_COMPLETION.md`**: Removed informal phrasing from helper script note. Added missing comma and `check` command to Zsh commands list. Fixed code block language tag (`bash` → `zsh`) for `source ~/.zshrc`.
- **Updated: `README.md`**: Fixed incorrect license (`MIT` → `GNU General Public License v3 (GPLv3)`). Fixed `PyPi` → `PyPI` capitalization. Updated `About` section description to cover all new 6.0.0 commands and features.
- **Updated: `slackbuild/slpkg.SlackBuild` and `install.sh`**: Removed useless `cat` in VERSION extraction (`cat file | grep` → `grep file`). Quoted variables in `install.sh` to prevent word splitting. Fixed hardcoded `.txz` extension → `.$PKGTYPE`. Fixed double space in `PRINT_PACKAGE_NAME` check. Added missing `slackbuild/slpkg.info` file per SBo guidelines.
- **Updated: `tools/gen_sbo_txt.sh`**: Quoted all variables (`$i`, `$NAME`, `$i/slack-desc`) to prevent word splitting and globbing issues.
- **Updated: shell completion (`completion/bash/slpkg`, `shell_completion.py`)**: Added missing `file-search` and `check` commands to bash `all_commands` list. Fixed `"dpstracking"` typo — split into correct separate entries `"dps"` and `"tracking"`. Replaced `open()` with `Path.open()`. Fixed wrong return type in `get_repo_packages` docstring.
- **Updated: `configs/slpkg.toml` and `configs/repositories.toml`**: Updated version headers to 5.6.0 and dates. Fixed comment typos and inconsistencies in `slpkg.toml`: grammar fix (`This ignored` → `This is ignored`), improved `TERMINAL_SELECTOR` description, added missing `Default is` lines for `PAGER`, `EDITOR`, and `CURL_OPTIONS`.
- **Updated: `configs/slpkg.toml`**: Fixed three comment inaccuracies: `PAGER` disable instruction corrected from `false` to `""` (PAGER is typed as string, not bool); `PACKAGE_METHOD` now explicitly maps `true` = package method and `false` = version method with the `-current` recommendation moved to the correct method; `DOWNGRADE_PACKAGES` clarified to "only works when `PACKAGE_METHOD = false` (version method)".
- **Updated: `configs/repositories.toml`**: Added a brief description comment to every repository section. Added missing `-current` warnings to `PONCE`, `SLACK_TESTING`, `CONRAID`, and `SLACKEL`. Fixed indentation of the `(except for Git repositories)` note.
- **Updated: `configs/blacklist.toml`**: Added missing standard header (`Location`, `Last Updated`, `Version`) for consistency with other config files. Corrected description from "will not be upgraded, removed, or installed" to "will not be upgraded, built, or installed" — the blacklist filters repository data only and does not prevent removal of installed packages.
- **Updated: man page (`man/slpkg.1`)**: Added documentation for the new `check` (ck, chk) command. Corrected and improved descriptions for several commands (`dependees`, `tracking`, `changelog`, `self-check`) and options (`-y`, `-c`, `-O`, `-r`, `-m`, `-f`, `-S`, `-T`). Fixed the `OPTION SYNTAX` example (replaced invalid flags with valid `-Pry`). Corrected `MUST YOU KNOW` section: four color indicators (was incorrectly stated as five). Removed a duplicate paragraph in `DESCRIPTION`. Updated `.TH` header: version `5.5.0` → `5.6.0`, replaced location string with proper date `February 2026`, set manual title to `User Commands`. Fixed inconsistent `\\-` double backslash in `-q/--quiet` and `-L/--local` options. Renamed `.SH FILELIST|PACKAGES` → `.SH PACKAGE LIST FILES` and `.SH MUST YOU KNOW` → `.SH NOTES`. Removed redundant word "file" from `CONFIGURATION FILES` entries. Fixed command name `slpkg_new-config` → `slpkg_new-configs`. Fixed grammar: `it's managing` → `manages`, `easily and fast` → `easily and quickly`.
- **Updated: `package-lists/multilib/`**: Fixed date in `15.0/glibc_packages.pkgs` (`25/09/2023` → `25/09/2024`). Added explicit mirror URL for Slackware -current in `current/README`.
- **Updated: man page (`man/slpkg.1`)**: Updated `.TH` header version to `6.0.0` and date to `March 2026`. Updated `DESCRIPTION` section to cover all new 6.0.0 commands and features. Added missing `-n/--lines` and `-Q/--query` to `OPTIONS` section. Fixed `-I` and `-N` option descriptions. Sorted `OPTIONS` alphabetically by long option name (29 flags). Aligned `COMMANDS` order to match help menu order.

### Fixed
- **Fixed: search result duplication and O(N^2) complexity**: Corrected a bug in the `search` command where a package could be counted multiple times if it matched several search patterns (e.g., when using `*` with the terminal selector). Added an early break in the matching loop and restricted pattern matching to exact names when packages are provided via selectors or dialogs to prevent redundant expansion.
- **Fixed: `pin` and `mark` reject non-installed packages**: Attempting to pin or mark a package that is not currently installed now prints `Not installed, skipping: <name>` and skips it. Previously, any arbitrary name was accepted and written to the log file.
- **Fixed: local repository support in `slpkg update`**: Repositories configured with a local filesystem mirror (`/path/to/repo/` or `file:///path/to/repo/`) now work correctly with `slpkg update`. Previously, three distinct failures occurred: (1) `check_updates` used `urllib3` HTTP HEAD requests to compare changelog sizes, which always fail on local paths; (2) the downloader invoked `wget`/`curl`/`aria2c`/`lftp` with a local path, which also failed; (3) `import_gpg_key` attempted to fetch a `GPG-KEY` from the local mirror URL. The fix detects local mirrors in all code paths: changelog comparison now reads the file size directly via `Path.stat()`; binary repo index files (`PACKAGES.TXT`, `CHECKSUMS.md5`, `ChangeLog.txt`, `MANIFEST.bz2`) are copied with `shutil.copy2` instead of downloaded; SlackBuild repo directory mirrors are synced with `shutil.copytree` instead of `lftp` (git mirrors already work natively); and GPG key import is skipped entirely for local mirrors. Remote repositories are not affected.
- **Fixed: `store_true` flags overriding `slpkg.toml` settings**: `config.py`'s `update_from_args()` used `args.option_xxx is not None` to guard `store_true` flags (`-D/--dialog`, `-P/--parallel`, `-q/--quiet`, `-y/--yes`). Because `store_true` always produces `True` or `False` (never `None`), the guard always passed — so running any command without `-D` would silently override a `DIALOG = true` toml setting to `False`, and similarly for the other flags. Fixed by changing the guard to `getattr(args, "option_xxx", False)` so the block only executes when the flag is explicitly given on the command line.
- **Fixed: `parallel_download` concurrency**: Downloads are I/O-bound subprocess calls (wget/curl/aria2c/lftp); the GIL is released during `subprocess.run()`, making `threading.Thread` the correct primitive instead of `multiprocessing.Process`. The previous code had two compounding bugs: `threading.BoundedSemaphore` is not shared across OS processes (each fork gets its own copy), and the semaphore was released immediately after `proc.start()` — before the download finished — so it provided zero rate-limiting. Switched to threads, moved the semaphore acquisition inside the thread closure so it is held for the full duration of each download, and eliminated shared mutable instance state (`self.filename`, `self.downloader_command`) by refactoring `tools()` and the four downloader setters to use local variables. `self.repo_data` is now read-only during parallel execution; each thread works with its own local copy.
- **Correctness bugs**: `remove_packages.py`: `deps_log` updated even when `removepkg` failed. `binaries/install.py`: deps log written and download counter inflated by `.asc` files on failed installs. `slackbuild.py`/`downloader.py`: install attempted after failed build; non-deterministic package detection via `iterdir()` → `glob("*.t?z") + sorted()`; wrong `sbosrcarch` location for all but the last package. `upgrade.py`: `ValueError` on malformed build strings; `self.data` permanently mutated in loop; `all_installed()` called once per repository instead of per loop. `cleanup.py`: symlink attack vector; `OSError` silently swallowed. `install_data.py`: `full_requires` flag reset per-package (always `False` at end of loop). `repositories.py`: `AttributeError` on fresh install (`sbo_branch`/`ponce_branch` missing class defaults); dead TOML flat-key check (`"SLACKBUILDS.TXT"`). `views/display.py`: `self.repository` mutated in removal loop; size line shown as "0 B" for SBo/Ponce. `views/process.py`: `message()` started a new progress bar without stopping the previous one — orphaned processes. `dialog_box.py`: shared `more_kwargs` dict caused `help_tags=True` to leak into subsequent `checklist()` calls. `self_check.py`: `AttributeError` when `HTTPError.response` is `None`. `binaries/dependencies.py`/`sbo/dependencies.py`: package could appear in its own dependency chain on 3+-level cycles. `main.py`: hardcoded `"/tmp/slpkg/"` path; fragile `[:2]` dict-order assumption for SBo/Ponce detection. `sbo/generate.py`: `done()` shown even after error; non-deterministic glob ordering. `load_data.py`: O(n×m) blacklist removal loop. `-q` flag conflict: `--query` (changelog) moved to `-Q`, freeing `-q` exclusively for `--quiet`.
- **TOCTOU — `is_file()` + `unlink()`**: Replaced with `unlink(missing_ok=True)` in `utilities.py`, `binaries/install.py`, `update_repositories.py`, and `remove_packages.py`. Removed redundant `if not is_dir()` guard before `mkdir(exist_ok=True)` in `utilities.py`.
- **Dead code removed**: Dead methods `set_http_proxy_server()`/`set_socks_proxy_server()` in `check_updates.py`. Unused `__slots__` entries in `binaries/dependencies.py` and `sbo/dependencies.py`. Unused attributes: `self.rows` (`views/package_line.py`, `choose_packages.py`, `repo_info.py`), `self.bullet` (`views/package_line.py`), `self.utils` (`views/process.py`, `check_updates.py`, `cleanup.py`), `self.log_id` (`upgrade.py`). Dead `else` branches after `raise SystemExit`/`NoReturn` calls. Dead `requires = []` in `install_data.py`; dead `isinstance` guard in `slackbuild.py`.
- **Code quality**: `split_package()` called once per input instead of 2–4× in `install_data.py`, `views/display.py`, and `choose_packages.py`. Set literals `{…}` instead of list literals for O(1) membership tests in `main.py`. `dict.setdefault()` for nested dict init in `file_search.py`. `.get(key, {}).get(...)` chained lookup in `check_updates.py` and `repo_info.py`. `Path(a, b)` constructor replaced with `/` operator in `checksum.py`, `check_updates.py`, `download_only.py`, and `utilities.py`. `shutil.get_terminal_size().columns` instead of tuple unpack in `repo_info.py`. `Version()` instantiated once in `dialog_box.py`. `int/float` detection simplified in `config_editor.py`. Fixed `repository: str | None = ""` type annotation in `choose_packages.py`. Added missing `from __future__ import annotations` in `file_search.py` and `gpg_verify.py`. `check_packages.py`: `VIRTUAL_PREFIXES`, `SKIP_PREFIXES`, `SKIP_SUFFIXES` extracted to class-level constants.
- **Security**: `gpg_verify.py`: replaced `shell=True` with `["gpg", "--verify", str(file)]` (`shell=False`) to eliminate shell-injection risk from filenames containing special characters.
- **Output consistency**: Standardised summary lines and headers for `search`, `list`, `reverse`, `depends`, `repo-info`, and `clean` commands. Suppressed redundant `"Download SBo"` line and hidden empty `x86_64` fields in `views/package_info.py`. Size line omitted when zero in `views/display.py`. Grammar: `"will be build"` → `"will be built"`.
- **Tests and tooling**: `pyproject.toml`: removed duplicate classifier, dead mypy overrides block, and redundant `[tool.flit_core]` section. `.gitlab-ci.yml`: removed redundant `allow_failure: false`; scoped `before_script` per-job. `tests_unittest/` suite: logic errors fixed, fragile hardcoded values replaced with structural assertions; added 6 new tests for `upgrade.py`, 14 for `utilities.py`, 5 for `blacklist.py`.
- **Fixed: `export` command — incorrect repository grouping**: Packages from `slack_patches` were grouped under `[slack]`, and packages from `ponce` under `[sbo]`, because both pairs share an identical `repo_tag` value (`""` and `"_SBo"` respectively). The tag-based heuristic (`clean_tag`) could not distinguish them. Fixed by replacing the tag lookup with a `data.json` search across all enabled repos; since `slack_patches` and `ponce` appear after `slack` and `sbo` in the repository dict order, they correctly win for packages present in both.
- **Fixed: `import` command — leftover `lstrip("_")` in `clean_tag`**: A `lstrip("_")` call was a relic of the old tag-based export format (where repo headers could carry a leading `_`). Since `export` now writes actual repo names directly, the call was removed.
- **Fixed: `rollback` command — `BUILD` transactions silently ignored**: `run()` had no branch for `action_type == "BUILD"`, so after the user confirmed with `y`, nothing happened. The pre-confirmation message also incorrectly read "Rollback will REINSTALL these packages". Fixed by detecting `BUILD` before asking for confirmation and displaying an informative "no system changes were made" message. Also fixed missing `self.yellow` attribute in `__init__` that would have caused `AttributeError` when a `BUILD` transaction was encountered.
- **Fixed: Python 3.9 compatibility**: `rollback.py` — added `from __future__ import annotations` to fix `TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'` on the `_find_local_package_file` return annotation `Path | None`. `verify_files.py` — `PermissionError` raised by `Path.exists()` on restricted paths when running as a non-root user (Python 3.9 raises; Python 3.12 returns `False` silently); both `abs_path.parent.exists()` and `abs_path.exists()` are now wrapped in `try/except PermissionError`.

### Renamed
- **Renamed: eight short flags for clarity and convention**: `-m` → `-i` (`--ignore-case`: universal grep/find convention); `-f` → `-b` (`--benchmark`: b=benchmark, intuitive); `-x` → `-C` (`--color`: avoids confusion with bash `-x` trace mode); `-E` → `-F` (`--full-reverse`: F=Full, immediately descriptive); `-k` → `-I` (`--skip-installed`: I=Ignore installed); `-O` → `-N` (`--no-resolve`: N=No-resolve, clearer than O); `-G` → `-g` (`--pager`: lowercase, less arbitrary); `-z` → `-w` (`--output-dir`: w=write-to, more intuitive than z).
- **Renamed: `--progress-bar` (`-B`) → `--quiet` (`-q`)**: The dedicated `--progress-bar` flag has been removed and its functionality merged into the existing `--quiet` flag. Use `-q` / `--quiet` with `install`, `build`, `upgrade`, or `remove` to suppress build output and show a progress bar instead. The `file-search` command continues to use `-q` to suppress individual file paths. The `-Q` short form previously used by `file-search` is now `-q` for consistency.
- **Renamed: four subcommands for clarity**: `dependees` → `reverse` (aliases: `r`, `rdeps`; matches SlackBuilds.org "Reverse Deps" terminology); `tracking` → `depends` (aliases: `d`, `dep`; standard in package managers); `check` → `verify` (aliases: `V`, `vfy`; avoids semantic clash with the `-c`/`--check` dry-run flag); `clean-tmp` → `clean` (aliases: `c`, `cln`; shorter and self-explanatory without the `-tmp` suffix).
- **Renamed: flags and subcommand aliases for clarity and convention**: `--resolve-off` → `--no-resolve` (GNU `--no-X` style); `--no-case` → `--ignore-case` (consistent with grep/find/awk); `--fetch` → `--benchmark` (accurately describes mirror latency testing); `--desc` → `--description` (no abbreviation); `-R`/`--pager` → `-G`/`--pager` (avoids visual clash with the `R` alias of `remove`); `-z`/`--directory` → `-z`/`--output-dir` (clearer purpose). Subcommand aliases: `config` alias `g` → `C`; `changelog` alias `a` → `n` (news/notes).
- **Renamed: `filelists/` → `package-lists/`**: The folder name `filelists` could be confused with Slackware's `FILELIST.TXT` repository files. The new name clearly reflects the folder's purpose: package list files (`.pkgs`) for use with `slpkg install`.
- **Renamed: modules for clarity and consistency**: `cleanings.py` → `cleanup.py` ("cleanings" is not natural English); `binaries/required.py` → `binaries/dependencies.py` (consistency with `sbo/dependencies.py`); `sbo/sbo_generate.py` → `sbo/generate.py` (redundant `sbo_` prefix inside `sbo/` package); `views/views.py` → `views/display.py` (module name same as package name); `views/imprint.py` → `views/package_line.py` (clearer purpose); `views/info_package.py` → `views/package_info.py` (consistent noun-noun ordering); `views/view_process.py` → `views/process.py` (redundant `view_` prefix inside `views/` package). All imports and corresponding test files updated. All 268 tests pass.
- **Renamed: `slpkg/sbos/` → `slpkg/sbo/`**: Singular form is more conventional for a Python subpackage directory. All imports updated. All 268 tests pass.
- **Renamed: `tracking.py` → `depends.py` and `dependees.py` → `reverse.py`**: Renamed modules and classes to align with the renamed subcommands: `Tracking` → `Depends`, `Dependees` → `Reverse`. Test files `test_tracking.py` → `test_depends.py` and `test_dependees.py` → `test_reverse.py` updated accordingly.

## Version 5.5.4 - 19-Feb-2026
### Fixed
- **Fixed: TOML configuration parsing**: Improved error handling in repositories.py when parsing repositories.toml. The application now catches TOMLKitError and displays a clean, user-friendly error message instead of a full Python traceback when encountering syntax errors like duplicate keys or unquoted strings.

## Version 5.5.3 - 10-Feb-2026
### Added
- **Added number of selected packages**: Show the number of selected packages in the terminal selector title. Update the selection count in real-time when a package is selected or deselected.
### Fixed
- **Fixed matching packages**: Fixed searching for installed packages with functions dialog and terminal selector with the command list.

## Version 5.5.2 - 29-Jan-2026
### Fixed
- **Fixed: `UnicodeDecodeError`**: In `MultiProcess` class by adding `errors='replace'` to `subprocess.Popen`. This prevents the application from crashing when a SlackBuild output contains non-UTF-8 characters. (Thanks to KGHN)
- **Fixed: shell completion**: Updated shell completion for short commands and added the file-search command.

## Version 5.5.1 - 15-Jan-2026
### Fixed
- **Fixed: Architecture detection logic for Slackware repositories**: Corrected a bug where 64-bit detection was improperly compared, and ensured aarch64 is correctly handled without the 64 suffix in repository paths. (Thanks to Jay Lanagan)

## Version 5.5.0 - 13-Jan-2026
### Added
- **Added: New `file-search` command**: Introduced a powerful file-level search engine that allows users to locate specific files, libraries, or paths across all enabled repositories. (Thanks to rizitis)
- **Added: Gzipped JSON indexing**: Implemented a robust indexing system that converts repository `MANIFEST` files into compressed JSON format. This drastically improves search speed while reducing disk usage by approximately 90%.
- **Added: Search Options**:
    - Supported `-q, --quiet` mode to display only package names.
- **Added: Enhanced UI feedback**: Integrated real-time installation status (`[ installed ]` / `[ uninstalled ]`) and syntax highlighting for search terms within the results.

## Version 5.4.6 - 11-Jan-2026
### Fixed
- **Fixed: Repository wildcard `*` support for search aliases**: Resolved an issue where the `s`, `ser`, `U` and `upg` aliases did not correctly permit the use of the repository wildcard (`-o "*"`), ensuring consistency with the full `search` command.

## Version 5.4.5 - 05-Oct-2025
### Added
- **Added Aliases**: Implemented aliases (shortcuts) for all major commands (e.g., i for install, u for update, b for build, dl for download, s for search) to significantly improve CLI efficiency and user experience.

## Version 5.4.4 - 09-Sep-2025
### Added
- **Enhancement: slpkg upgrade now suggests new packages**: The slpkg upgrade command has been enhanced to be more comprehensive. In addition to listing packages with available updates, it now identifies and presents new packages that have been added to the repositories since the last database update but are not currently installed on the system. These new packages are clearly marked with an "Add New Package" label in the terminal selector, allowing users to select and install them alongside regular package upgrades in a single, streamlined process.

### Fixed
- **Bug Fix: Corrected incomplete dependency resolution**: This release fixes a critical bug in the dependency resolution logic of the dependencies.py and required.py modules. Previously, the system would fail to correctly identify and include all required transitive dependencies for a package, leading to incomplete dependency lists.

## Version 5.4.3 - 28-Jul-2025
### Fixed
- **Fix: SyntaxError in terminal_selector.py f-string for older Python versions**: Addressed a SyntaxError: f-string: expecting '}' that occurred in slpkg/terminal_selector.py (specifically line 244) when running with older Python versions (e.g., Python 3.9). This error was caused by nested double quotes within an f-string expression. Modified the problematic f-string to use single quotes for the nested expression (' ' * balance_length) instead of double quotes. This ensures broader compatibility of the slpkg application across various Python 3.x environments, including those where the f-string parser is less forgiving of nested quote types. Newer Python versions (e.g., 3.12+) are not affected by this specific parsing issue, but the fix maintains compatibility. (Thanks to KB_SBo)

## Version 5.4.2 - 27-Jul-2025
### Added
- **Added SLACK_TESTING Repository**: This update includes a new repository configuration in repositories.toml, providing direct access to the official Slackware testing tree. This addition was made in response to a user request on the linuxquestions.org forum, highlighting the community's need for easier access to testing packages. This repository points to the slackware64-current/testing/ mirror, which contains packages currently under development and testing for the next stable release of Slackware. By default, this repository is ENABLE = false to ensure system stability for most users. Users must explicitly enable it in their repositories.toml file if they intend to use it. (Thanks to marav)
- **Added COSMIC Repository**: This update introduces a new repository configuration in repositories.toml for the COSMIC Desktop Environment, a work-in-progress desktop environment. This addition caters to users interested in testing and contributing to the development of COSMIC on Slackware.  A new entry [COSMIC] has been added to the repositories.toml file. This repository points to https://slackware.uk/cosmicde/x86_64/, providing access to packages related to the COSMIC desktop environment. COSMIC is a new desktop environment under active development. This repository allows users to install and test the latest builds of COSMIC on Slackware -current. This repository is specifically based on Slackware -current. Users are advised to enable it only if they are running a Slackware -current installation to avoid potential compatibility issues. (Merge Request: !121)

## Version 5.4.1 - 23-Jul-2025
### Added
- **`--dialog` (`-D`) Option Across Package Commands**: This update significantly enhances user interaction by extending the --dialog option's availability to all commands that involve package selection or management. This provides users with a choice between the traditional terminal selector and a dialog-based interface for interactive package selection instead to terminal selector. The --dialog (-D) option can now be used with the following commands: build, install, remove, download, list, info, search, dependees, and tracking.
- **Sorted Package Display in Terminal Selector**: The list of packages presented to the user in the terminal selector (when the dialog option is not active) is now consistently sorted alphabetically (not dependency lists). This is achieved by applying self.match_packages = sorted(self.match_packages) before the TerminalSelector is initialized. Sorting the package list makes it significantly easier for users to navigate and locate specific packages, especially in scenarios involving a large number of matching results. This improves the overall efficiency and user-friendliness of interactive package selection.

## Version 5.4.0 - 21-Jul-2025
### Added
- **Dialog option to upgrade command**: Added `--dialog` option to enable text-based graphical user interfaces (TUI) for interactive prompts when available.
- **Terminal selector: Enhanced Visual Feedback**: The "pick" character (the asterisk * for selected items) now uses a yellow foreground color when terminal colors are enabled, providing clearer and more immediate visual feedback for selected items. A distinct > character is now used as a prefix for the currently highlighted item, improving visual distinction and guiding the user's focus. This prefix is dynamically applied based on the cursor's position.
- **Tab Key for Select/Deselect All**: This update introduces a new keyboard shortcut to enhance usability within the interactive terminal selector. Tab Key Functionality (\t): Users can now press the Tab key to quickly select or deselect all available items in the list.
- **Added --pager Command-Line Option**: A new command-line option, --pager (or its short form, -R), has been introduced. When this option is used, the output of the command will be piped through a terminal pager, enabling interactive scrolling, searching, and navigation of the content. This is particularly useful for viewing large outputs that exceed the terminal's visible lines.
- **Configurable Pager via slpkg.toml**: The specific pager command to be used can now be configured by setting the PAGER variable in your slpkg.toml file (e.g., PAGER = "less -R" or PAGER = "most"). If the PAGER variable is not defined in the configuration, less -R will be used as the default. The -R option for less ensures that ANSI color escape sequences are correctly interpreted, preserving color formatting in the output.
- **Improved changelog.py Output Handling**: The display_changelog method in changelog.py has been updated to conditionally use the configured pager. If the --pager option is enabled, the changelog content is streamed to the pager. Otherwise, the content is printed directly to standard output, maintaining compatibility for users who prefer non-paginated output. This change also addresses pylint and mypy warnings by using subprocess.Popen with a with statement for robust resource management.
- **Configurable Editor via slpkg.toml**: The default text editor used for file editing operations can now be specified by setting the EDITOR variable in your slpkg.toml configuration file (e.g., EDITOR = "vim"). If this variable is not explicitly set in slpkg.toml, the system will fall back to checking the EDITOR environment variable.
- **New --edit Option for install and build commands**: This option opens the target SlackBuild file in the user's configured editor (specified by the editor configuration setting) just before the build process begins, allow the user to make changes.
- **New option `--repo-tag` (`-T`) for build/install commands**: Allows users to set a specific repository tag for SlackBuild scripts. This tag helps distinguish custom builds from other sources. The option expects a tag value (e.g., `_custom`) and is applied before a build operation, exclusively to SlackBuilds from supported repositories.

## Version 5.3.9 - 18-Jul-2025
### Fixed
- **Addressed a ValueError occurring during package removal or upgrade processes**: This error was triggered when the 'ok' string, indicating a user selection, was erroneously interpreted as a numerical value during conversion to an integer. The fix ensures correct handling of user input.

### Added
- **Added --edit option**: A new global option, --edit (or -e), has been introduced. This option allows users to open relevant files (e.g., changelog entries, configuration files) directly with the system's default text editor. This enhances user convenience by providing a quick way to modify content without manually locating and opening files.
- **Added --edit option to config command**: The config command now supports the --edit (or -e) option. This allows users to directly open the slpkg.toml configuration file using the system's default text editor even if the dialog is enabled. This provides a convenient and quick way to manage and modify slpkg settings.
- **Comprehensive Logging Implemented Across All Modules**: This release marks the completion of a significant refactoring effort to integrate robust logging capabilities throughout the application. This comprehensive logging implementation significantly enhances the diagnostic capabilities and
overall stability of the slpkg application.
- **New: Configurable Logging Level**: The application's logging verbosity can now be controlled via the LOGGING setting in the slpkg.toml configuration file. Users can specify the desired logging level (e.g., "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL") to tailor the amount of detail written to the log file, aiding in troubleshooting and normal operation. The default logging level remains "INFO" if not explicitly set in the configuration.
- **Added --debug / -d Command-Line Option**: A new command-line option, --debug (or its shorthand -d), has been added to all slpkg commands. This option allows users to directly set the logging level to DEBUG from the command line, overriding any logging_level configuration specified in slpkg.toml. This provides a convenient way to enable verbose logging for troubleshooting without modifying the configuration file.

### Updated
- **Refactored slackbuild.py for Single Responsibility Principle (SRP)**: The slackbuild.py module has undergone significant refactoring to adhere more closely to the Single Responsibility Principle (SRP). Previously, the Slackbuilds class handled a multitude of responsibilities, including dependency resolution, source preparation, downloading, building, installing, and cleanup. The main Slackbuilds class now acts as an orchestrator, coordinating the actions of these specialized components, leading to a more robust and modular codebase.
- **install.py Module: Implementation with SRP and Logging**: The install.py module, responsible for downloading and installing binary packages with their dependencies, has been refactored to better adhere to the Single Responsibility Principle (SRP) and now includes comprehensive logging.

## Version 5.3.8 - 15-Jul-2025
### Fixed
- **Terminal Selector Scrolling for Large Lists**: We've completely overhauled the Terminal Selector to properly handle scrolling for large lists. Previously, when listing many items (e.g., 1700+ packages), the display would break, with the highlight getting stuck at the top of the terminal while the actual selection was far off-screen. Now, the selector uses a viewport system that only displays the items currently visible on your screen. Moving with arrow keys or Page Up/Page Down will smoothly scroll through the list, ensuring the highlighted item is always in view. This makes navigating even massive lists much more intuitive and stable.

## Version 5.3.7 - 13-Jul-2025
### Fixed
- **AttributeError**: 'Repositories' object has no attribute 'sbo_branch' (Thanks to marav)
- **Empty Package Selection Crash**: Resolved an issue where the package removal process would crash with a ValueError: max() iterable argument is empty if no packages or dependencies were found or selected for removal. The application now handles this scenario gracefully.
- **Upgrade Package Selection**: Resolved an issue that prevented the TerminalSelector from correctly displaying or allowing selection of packages during the upgrade process.

### Updated
- **Improved: Version Check Mechanism**: The self-update check now uses pyproject.toml instead of CHANGELOG.md to determine the latest available version. This change leverages the more stable and structured nature of pyproject.toml for version information, leading to more reliable and consistent update checks.

## Version 5.3.6 - 06-Jul-2025
### Added
- **New Feature: changelog Command**: A new changelog command has been added, allowing users to view the changelog for a specified repository. Users can now display the full changelog by running slpkg changelog -o repository_name. Additionally, the command supports a --query (or -q) option to filter changelog entries by a specific search term, such as a package name, keyword, version, or date.
- **Enhanced Bash and Zsh Completion**: The full command-line completion implementation for both Bash and Zsh is now complete. This significantly improves your command-line experience by offering auto-completion not just for slpkg commands, but also for repository package names, making package management even faster and more intuitive on your preferred shell.

## Version 5.3.5 - 05-Jul-2025
### Fixed
- **Fix: Permission Denied Error for Log Files**: This release addresses a PermissionError: [Errno 13] Permission denied issue that occurred when slpkg attempted to write or unlink the error.log file in /var/log/slpkg/ while running as a non-root user. Previously, the application would always try to manage log files in the system-wide /var/log/ directory, which requires root privileges. This caused errors for users running slpkg without root privileges.

## Version 5.3.4 - 01-Jul-2025
### Fixed
- **Fix KeyError**: Improved data access reliability by fixing an underlying KeyError during description lookup and search command.

## Version 5.3.3 - 30-Jun-2025
### Updated
- **Improved Progress Indicator**: We've enhanced the user experience during updates! The "Checking for news" progress indicator now transitions smoothly from the spinning animation to a clear "Done" message, ensuring a cleaner and more intuitive visual feedback for completed tasks.

### Fixed
- **Fix KeyError**: Improved data access reliability by fixing an underlying KeyError during description lookup and search command.
- **Fix error logging initialization**: Corrected an issue where log messages were not being written to the error log file (`/var/log/slpkg/error.log`). This was due to `logging.basicConfig()` being called multiple times within the application. The `logging` module's `basicConfig()` method is designed to configure the root logger only once. Subsequent calls are ignored, preventing the file handler from being correctly set up. The fix involved removing redundant `logging.basicConfig()` calls, ensuring the primary configuration in `main.py` is the sole one, thereby allowing error messages to be persistently logged as intended.

## Version 5.3.2 - 27-Jun-2025
### Updated
- **Repository Branch Configuration**: The Git repository branch can now be specified by the user within the configuration file (e.g., [PONCE] BRANCH = 'current'). This removes the need for automatic branch detection, providing users with more control over the source repository.
- **Enhanced Security**: slpkg now enforces root privileges for critical commands like install, build, and update etc. This ensures that system-level changes are only performed by authorized users, preventing accidental or malicious modifications.
- **Improved User Experience**: Commands that don't require system-level access, such as info, search, list etc, can still be executed without root privileges, allowing for easy package exploration and management.

### Added
- **Expanded Search & List Functionality**: A new --desc option has been added to the search and list commands. This allows users to include the package description in the output, providing more comprehensive information at a glance.

### Fixed
- **Corrected an issue**: Where package descriptions were not being properly stored in the database during the installation process.

## Version 5.3.1 - 24-Jun-2025
### Updated
- **Type Annotations**: Corrected various type annotation inconsistencies across the codebase to improve readability, maintainability, and static analysis.
- **Argument Parsing**: Migrated `slpkg_new-configs.py` to use Python's `argparse` module for command-line argument handling, replacing manual `sys.argv` parsing with a robust, standardized approach.

### Fixed
- **Updated CLI Usage Message**: The primary usage message displayed when invoking slpkg without arguments, or with --help, has been refined for clarity and consistency. Previously, it incorrectly indicated <COMMANDS>, suggesting multiple commands could be used simultaneously. It has now been corrected to Usage: slpkg <COMMAND> [PACKAGES] [OPTIONS] to accurately reflect that only a single command is executed at a time. This minor adjustment improves user guidance and aligns with standard command-line interface conventions. 

## Version 5.3.0 - 16-Jun-2025
### Fixed
- Corrected source download counting for SlackBuilds repositories (sbo and ponce).
- Improved type annotations for enhanced static analysis and code clarity.
- Resolved all static type checking errors reported by `mypy` to improve code quality and reliability.
- Implemented a singleton pattern for the `Configs` class to ensure `config.py` is read only once, preventing redundant file reads and performance overhead.

### Added
- **Configuration Validation**: Added validation to ensure settings in `slpkg.toml` are of the correct data type.
- **New Repositories**: Added support for `d2slack` and `slackdce` repositories, as requested by LU9DCE (#191).
- **Version Checking**: Introduced functionality to check for new versions of `slpkg`, notifying users of available updates.
- **Manual Package Selection**: Enabled manual package selection via command-line input when the graphical dialog is disabled.
- **Editor Fallback**: Configuration file editing (`/etc/slpkg/slpkg.toml`) now uses the `EDITOR` environment variable if the interactive dialog interface is unavailable.
- **Color Option**: Added `--color` option to control colored output explicitly, allowing users to enable or disable it regardless of terminal detection.
- **Dialog Option**: Added `--dialog` option to enable text-based graphical user interfaces (TUI) for interactive prompts when available.

### Updated
- Migrated command-line argument handling to Python's `argparse` module, reducing codebase size and complexity by approximately 40%, improving maintainability and performance. **Note**: This may alter command-line argument behavior; review `slpkg help` for updated usage details.
- Disabled CLI color output by default for better compatibility across terminal emulators.
- Disabled ASCII-only character output by default to enhance display consistency.
- Removed borders and additional color schemes to improve terminal compatibility and reduce rendering overhead.
- Renamed `--view` command to `info` for a more descriptive name.
- Made `python-dialog` an optional dependency, with fallback to command-line selectors if not installed.

## Version 5.2.5 - 24-Apr-2025
### Fixed
- Resolved unbound local variable issues.
- Removed unused variables.
- Fixed incompatible type assignments.
- Eliminated unnecessary repository data loading for installed packages and `find` command.
- Added support for ASCII emoji in terminal output.

## Version 5.2.4 - 18-Apr-2025
### Updated
- Added autodetection for CPU and OS architecture.
- Set default options for `aria2` with `-c` flag.

### Fixed
- Ensured verification of `data.json` database file existence.

## Version 5.2.3 - 07-Apr-2025
### Fixed
- Resolved bug with accessing local variable `deps_logs` (#189).

### Added
- Introduced `aria2` as an alternative downloader.

## Version 5.2.2 - 01-Apr-2025
### Fixed
- Fixed `EOFError` in input method.
- Limited `sbosrcarch` repository to `ponce` and `sbo` only.

### Updated
- Added comments to `slpkg.toml`, `repositories.toml`, and `blacklist.toml` configuration files.
- Updated manpage text instructions.

### Added
- Added `sbosrcarch` mirror as an alternative download source for `sbo` and `ponce` repositories.

### Removed
- Removed outdated French manpage.

## Version 5.2.1 - 28-Feb-2025
### Added
- Introduced `cli.py` module.

## Version 5.2.0 - 19-Feb-2025
### Added
- Added color-coded options for upgrading or adding new packages.
- Included a message for moving packages to the `tmp/` directory.
- Added `BOOTLOADER_UPDATE` configuration to execute a command.

### Updated
- Renamed temporary binary package directory.

### Fixed
- Prevented execution without root privileges.

## Version 5.1.9 - 13-Feb-2025
### Updated
- Enhanced code quality with improved type annotations and docstrings.

### Fixed
- Corrected source download counter for the `download` option.
- Fixed `KeyError` during package removal.

## Version 5.1.8 - 24-Jan-2025
### Fixed
- Resolved `AttributeError: 'PosixPath' object has no attribute 'endswith'` (thanks to marav).

## Version 5.1.7 - 18-Jan-2025
### Fixed
- Sorted package lists for upgrades and new installations.
- Removed kernel version from package versions during upgrades (thanks to marav).
- Corrected detection of built packages in the `/tmp` folder.

## Version 5.1.6 - 29-Oct-2024
### Added
- Added warning message for kernel upgrades.

### Fixed
- Fixed newline issue at process completion.

## Version 5.1.5 - 06-Oct-2024
### Updated
- Improved searching for installed packages by repository.

## Version 5.1.4 - 29-Sep-2024
### Fixed
- Fixed auto-update for Git repositories.

## Version 5.1.3 - 26-Sep-2024
### Fixed
- Corrected ASCII character handling for `done` and `failed` statuses.

### Updated
- Modified the upgrade method to prioritize adding new packages.

### Added
- Added support for Git repositories.
- Included completion time for updates.

## Version 5.1.2 - 22-Aug-2024
### Fixed
- Fixed upgrades when the `new_packages` method is enabled.

## Version 5.1.1 - 22-Jul-2024
### Added
- Added `installed` tag for installed packages in the `search` command.
- Introduced `--fetch` option to identify the fastest and slowest mirrors.

### Fixed
- Fixed creation of custom repositories (thanks to mac-a-r0ni).
- Resolved `OSError: [Errno 24] Too many open files` for parallel downloads (thanks to rizitis).

## Version 5.1.0 - 06-Jun-2024
### Added
- Introduced `PACKAGE_METHOD` configuration to select the upgrade method.
- Added `DOWNGRADE_PACKAGES` configuration to allow package downgrades (thanks to marav).
- Added `PACKAGE_TYPE` configuration for custom binary types.
- Replaced `tomli` and `tomllib` with `python3-tomlkit` for `-current`.

### Updated
- Improved invalid package version messages.
- Converted `upgrade.log` to JSON format.
- Separated process bar from the progress bar.

## Version 5.0.9 - 23-May-2024
### Added
- Added informative message for invalid package versions with the `upgrade` command.
- Added configuration to delete sources after building or installing packages.

## Version 5.0.8 - 10-May-2024
### Added
- Enabled viewing packages with missing dependencies by repository (thanks to rizitis).

### Updated
- Moved `NEW_PACKAGES` and `REMOVE_PACKAGES` configurations to `repositories.toml`.

### Removed
- Removed `slackdce` repository (thanks to rizitis).

## Version 5.0.7 - 07-May-2024
### Fixed
- Replaced TOML error messages with custom error messages.
- Resolved optional dependencies for package removal.

### Updated
- Enhanced code quality.
- Improved GPG key import verification.
- Sorted `search` command output (thanks to marav).
- Updated GNOME mirror (thanks to rizitis).
- Prevented circular dependencies.

### Added
- Added total file size display for the `find` command.

## Version 5.0.6 - 19-Apr-2024
### Release Note
- Users may need to force-update local repositories before using this version.

### Updated
- Enabled reading configuration values regardless of case (lowercase or uppercase).

### Added
- Added support for custom repositories.
- Introduced `KERNEL_VERSION` configuration to handle custom SlackBuild versions.

## Version 5.0.5 - 12-Apr-2024
### Added
- Added maximum parallel download limit in the configuration file.
- Introduced `--pkg-version` option for the `search` command.
- Added file size display for the `find` command.

### Removed
- Removed support for local repositories.

### Updated
- Excluded packages from `slack_extra` repository (thanks to marav).
- Updated SalixOS mirrors.
- Updated `repositories.toml` configuration file.

### Fixed
- Fixed `BrokenPipeError: [Errno 32] Broken pipe`.
- Corrected download path for download-only operations.
- Fixed alignment in the `search` command.

## Version 5.0.4 - 04-Apr-2024
### Updated
- Ignored blacklisted installed packages.
- Updated progress bar spinners.

### Removed
- Removed `python3-progress` dependency.

### Fixed
- Fixed comparison of invalid package versions.
- Restored functionality for local repositories.

### Added
- Added extra `lftp` mirror options in the configuration file.

## Version 5.0.3 - 01-Apr-2024
### Updated
- Updated `slpkg_new-configs` and `(D)iff` command (thanks to marav).

### Fixed
- Fixed `JSONDecodeError: Expecting value: line 1 column 1 (char 0)` (thanks to marav).

## Version 5.0.2 - 30-Mar-2024
### Updated
- Improved coding style.
- Updated `tomli` import for `-current` version.
- Updated handling of "ticked on/off" packages when already up-to-date (#181).

### Fixed
- Fixed custom package upgrades (thanks to marav).
- Fixed package installation during `upgrade` command (#180).

## Version 5.0.1 - 29-Mar-2024
### Updated
- Enhanced checking of upgrade packages against all repositories (`slpkg upgrade --repository='*' --check`).

### Fixed
- Fixed package upgrades for `-current` version (thanks to marav).

## Version 5.0.0 - 24-Mar-2024
### Updated
- Implemented blacklist using regex patterns.
- Moved `check-updates` command to `--check` option.
- Renamed `--no-silent` option to `--progress-bar`.
- Set default silent mode to `false`.

### Removed
- Removed `SQLAlchemy` dependency.
- Removed `help` command; use manpage instead.
- Removed `clean-logs` and `clean-data` commands.
- Removed `rules.toml` configuration file.
- Removed `--install-data` option.
- Removed `FILE_PATTERN` from configurations.
- Removed `--jobs` option.
- Removed `spinning_bar` configuration.

### Added
- Added package upgrade checking with the `--check` option.
- Introduced `MAKEFLAGS` configuration to specify the number of jobs.
- Added support for GPG verification.
- Added `NEW_PACKAGES` configuration for `-current` users and `upgrade` command.
- Added `REMOVED_PACKAGES` configuration for `-current` users and `upgrade` command.

### Fixed
- Fixed double view message when updating repositories.
- Corrected package file size calculation for removal.

## Version 4.9.8 - 14-Feb-2024
### Added
- Added `urllib3` settings to the `slpkg.toml` configuration file.

## Version 4.9.7 - 07-Jan-2024
### Fixed
- Fixed `urllib3 KeyError: 'content-length'`.

### Updated
- Improved repository update checking.

## Version 4.9.6 - 16-Dec-2023
### Added
- Added `slackdce` repository (thanks to rizitis).

### Updated
- Switched to GNU General Public License v3 (GPLv3).

## Version 4.9.5 - 10-Dec-2023
### Fixed
- Fixed package removal with the `--yes` option.

## Version 4.9.4 - 04-Dec-2023
### Added
- Added `LFTP_EXCLUDE` option for the `lftp` command to ignore non-essential files.

## Version 4.9.3 - 28-Nov-2023
### Updated
- Enhanced `[Tracking]` to return the complete list of package dependencies.
- Improved process exit status code messages.

### Fixed
- Fixed process stderr exit code.

### Added
- Added `pprkut` repository (thanks to rizitis).

## Version 4.9.2 - 05-Aug-2023
### Updated
- Improved update checking to return repository size.
- Updated Conraid repository mirror URL.

## Version 4.9.1 - 28-Jun-2023
### Updated
- Updated bullet progress bar color.
- Changed logging path to `/var/log/slpkg/`.
- Supported package builds with `pyproject.toml` (requires `python3-build`).

### Added
- Added process log file under `/var/log/slpkg/filename_date_time.log`.
- Added process log file setting in `/etc/slpkg.toml`.

## Version 4.9.0 - 21-Jun-2023
### Updated
- Improved multilib installation instructions.

### Fixed
- Fixed repository update continuation after a failure.

## Version 4.8.9 - 06-Jun-2023
### Fixed
- Fixed `urllib3.exceptions.NewConnectionError` (#173, thanks to rizitis).

## Version 4.8.8 - 29-May-2023
### Updated
- Updated French manpage.

### Fixed
- Fixed dependency selection for upgraded packages.
- Fixed building packages with the same source name (e.g., `nvidia-driver` and `nvidia-kernel`).

## Version 4.8.7 - 23-May-2023
### Fixed
- Fixed package tags for `slack_patches` and `salixos_patches`.
- Fixed parallel downloads for SlackBuilds repositories (`sbo`, `ponce`).

## Version 4.8.6 - 21-May-2023
### Updated
- Optimized database loading (#172).

### Fixed
- Fixed `ValueError` in `search` command.
- Fixed updating packages to the same version (#169).
- Fixed `--skip-installed` option.

### Added
- Added `rules.toml` configuration file.

## Version 4.8.5 - 18-May-2023
### Fixed
- Fixed case sensitivity in `find` and `search` commands.
- Fixed combination of `--repository=` and `--directory=` options.
- Fixed `TypeError` in `repo-info` command (#171).

## Version 4.8.4 - 14-May-2023
### Added
- Added case-insensitive pattern matching with `--no-case` option.
- Enabled border color selection via configuration file.
- Added new processing status views for build, install, upgrade, and remove operations.

### Fixed
- Fixed removal of chosen dependencies.

## Version 4.8.3 - 29-Apr-2023
### Updated
- Improved synchronization with local repositories (thanks to Christopher Schrauben, #166).
- Renamed `--bin-repo` option to `--repository`.

### Added
- Added `--install-data` option to install only database data.
- Added column for package installed version (thanks to tpiszcze).

## Version 4.8.2 - 25-Apr-2023
### Updated
- Improved exit status code handling.
- Enhanced package summary for file size calculations.

### Added
- Added option to enable or disable the spinning bar.

### Fixed
- Fixed Slackware patches repository tag.
- Fixed skipping source downloads for installed packages (thanks to kingbeowulf, LQ63).

## Version 4.8.1 - 21-Apr-2023
### Updated
- Improved error messages.
- Enhanced repository updates (thanks to rizitis).
- Improved `reinstall` command for Slackware.

### Fixed
- Fixed double packages as main and dependency in binary repositories.
- Fixed package viewing for `ponce` repository (thanks to rizitis).

## Version 4.8.0 - 19-Apr-2023
### Fixed
- Fixed dependency counting for tracking and blacklisted packages.
- Fixed dependency resolution for blacklisted or excluded packages.

## Version 4.7.9 - 15-Apr-2023
### Updated
- Improved proxy configuration.
- Enhanced file size conversion.
- Optimized package upgrades.

### Fixed
- Fixed screen clearing when dialog is disabled.

### Added
- Added support for local repositories (thanks to marav).

## Version 4.7.8 - 12-Apr-2023
### Added
- Added support for Unix shell-style wildcards in blacklists (thanks to marav).
- Added proxy support (thanks to tpiszcze, #160).

### Updated
- Improved `--reinstall` option configuration (thanks to rizitis).
- Enhanced performance.

## Version 4.7.7 - 07-Apr-2023
### Updated
- Replaced multiple SQL queries to improve performance.

### Fixed
- Fixed double dependencies in binary repositories.
- Fixed package version removal.
- Fixed alignment for package name and version.

### Added
- Added `__slots__` to improve performance.
- Added removal of local repository data.

## Version 4.7.6 - 04-Apr-2023
### Fixed
- Fixed package upgrades with build numbers >= 10.

### Updated
- Added color indication for upgradable packages.
- Enabled package upgrades by repository.

### Added
- Added package lists for multilib installation.
- Added dependency detection before package removal (thanks to marav).
- Added `-y`, `--yes` flag to the `remove` command.
- Added support for `wget2` downloader.

## Version 4.7.5 - 04-Apr-2023
### Fixed
- Fixed package upgrades from repositories.

## Version 4.7.4 - 04-Apr-2023
### Fixed
- Fixed Python typing hints.
- Fixed package upgrades.

### Updated
- Improved color indication for upgradable packages during installation.

## Version 4.7.3 - 03-Apr-2023
### Fixed
- Fixed `-B` option for `-u` (update) and `-c` (check-updates) commands.
- Fixed building packages with shared sources (e.g., `nvidia-driver` and `nvidia-kernel`).
- Fixed data mirror installation for `msb`, `csb`, `salixos_extra`, and `salixos_patches` repositories.

## Version 4.7.2 - 02-Apr-2023
### Updated
- Improved package version parsing.
- Simplified `-B=` and `-z=` options to `-B` and `-z`.

### Fixed
- Fixed dependency upgrades without `-r` option.
- Fixed SlackBuild repository tag.
- Fixed file pattern `*` to find all installed files.

## Version 4.7.1 - 02-Apr-2023
### Fixed
- Fixed `TypeError: can only concatenate str (not "NoneType") to str`.

## Version 4.7.0 - 02-Apr-2023
### Updated
- Improved checks for recurring options.
- Enhanced performance and code quality.

### Removed
- Removed file pattern from CLI menu.

### Added
- Added support for binary repositories.
- Added support for sixteen binary repositories.
- Added repository information display.

## Version 4.6.1 - 15-Mar-2023
### Updated
- Improved handling of empty arguments.
- Enhanced checks for invalid options.
- Improved error messages.

### Added
- Added `vimdiff` support in the `slpkg_new-configs` command (thanks to tkor).

## Version 4.6.0 - 15-Mar-2023
### Updated
- Improved dialog text help for dependencies.
- Enhanced configuration error messages.
- Removed `-N` timestamping from `wget` options.

### Fixed
- Fixed summary for package upgrades.
- Fixed handling of `KeyboardInterrupt`.

### Added
- Added progress spinner and color selection in the configuration file.

## Version 4.5.9 - 14-Mar-2023
### Fixed
- Fixed default build path to `/tmp/slpkg/build`.
- Fixed building packages with multiple sources.

### Added
- Added `lftp` as a source file downloader.
- Added support for multiprocess downloading.
- Added configuration for parallel downloads.
- Added `--parallel` option for parallel downloads.
- Added build tag display to package views (thanks to marav).

### Updated
- Enabled upgrading packages with the same version but different build tags (thanks to marav).
- Renamed `new-configs` to `slpkg_new-configs`.

## Version 4.5.8 - 09-Mar-2023
### Updated
- Displayed repository names instead of sizes.
- Highlighted installed packages in grey.
- Removed update confirmation prompts.

## Version 4.5.7 - 07-Mar-2023
### Added
- Added support for ignoring comments in `list.pkgs` files (thanks to rizitis).
- Added file pattern configuration.
- Added `new-configs` command for managing `.new` files.
- Added support for `.sqf` files (thanks to rizitis).

### Updated
- Improved blacklist configuration file.

### Fixed
- Fixed `TypeError: '<' not supported between instances of 'str' and 'int'`.

## Version 4.5.6 - 03-Mar-2023
### Updated
- Updated `ponce` repository.
- Updated `slpkg.toml` for `ponce` repository.

### Added
- Added `--generate-only` option for `ponce` repository.
- Added `clean-data` command to delete repository data.
- Added dialog text help for items.
- Added support for reading packages from files.
- Added configuration prompts.

## Version 4.5.5 - 02-Mar-2023
### Fixed
- Fixed generator type to list return.

## Version 4.5.4 - 05-Feb-2023
### Updated
- Improved configuration messages.

### Added
- Added support for concatenating short options (thanks to marav).
- Added `help` command for additional assistance.
- Added `ponce` repository.
- Added `lftp` downloader.

### Fixed
- Fixed TOML decoder error for blacklist file.
- Fixed version comparison for dependencies (thanks to marav).

## Version 4.5.3 - 27-Jan-2023
### Added
- Added short options.
- Added new configuration for ASCII characters.

## Version 4.5.2 - 21-Jan-2023
### Fixed
- Fixed `IndexError: list index out of range`.

### Updated
- Updated manpages for options (thanks to marav).

### Added
- Added `--file-pattern` option.
- Added `curl` downloader as a secondary option.

## Version 4.5.1 - 16-Jan-2023
### Added
- Added `--directory=PATH` option for the `download` command.
- Added `--pkg-version` option to print repository version.

## Version 4.5.0 - 14-Jan-2023
### Updated
- Prioritized downloading all SlackBuilds first.
- Renamed `view_mode` to `silent_mode`.

### Added
- Added `--no-silent` option.

## Version 4.4.9 - 13-Jan-2023
### Updated
- Improved color highlighting for installed packages.

### Fixed
- Fixed package upgrades (thanks to marav).

## Version 4.4.8 - 12-Jan-2023
### Added
- Added ASCII box for checksum errors.

## Version 4.4.7 - 07-Jan-2023
### Added
- Added completion report for download-only operations.
- Added French manpage (thanks to marav).
- Added verification for file downloads.

### Updated
- Replaced `os.isdir` with `pathlib` module.

## Version 4.4.6 - 06-Jan-2023
### Updated
- Improved performance for dependency handling.

### Fixed
- Fixed build summary.

### Removed
- Removed `python-toml` dependency.

## Version 4.4.5 - 03-Jan-2023
### Added
- Added modern view mode style.
- Added progress bar.

### Updated
- Fixed MD5 sum comparison.

## Version 4.4.4 - 31-Dec-2022
### Fixed
- Fixed `AttributeError: 'PosixPath' object has no attribute 'startswith'`.
- Fixed `KeyError: 'sbo_chglog_txt'` (#LQ post6401410).

## Version 4.4.3 - 30-Dec-2022
### Updated
- Switched to `pathlib` library.

## Version 4.4.2 - 29-Dec-2022
### Updated
- Improved path handling.

## Version 4.4.1 - 28-Dec-2022
### Added
- Added `configs` command to read and edit configuration files.

## Version 4.4.0 - 23-Dec-2022
### Added
- Added command to track dependencies.
- Added `pythondialog` as a dependency.
- Added dialog support for upgrade, remove, and dependency operations.
- Added `--full-reverse` flag for dependency handling.
- Added `--search` flag to enable dialog for package selection.

## Version 4.3.9 - 22-Dec-2022
### Added
- Added feature to check `ChangeLog.txt` before updates (#153).
- Added `dependees` command.

### Fixed
- Fixed display of installed versions.
- Fixed permission denied issue (#152).
- Fixed colors and messages for upgrade and reinstall operations.
- Fixed dependency installation order.

## Version 4.3.7 - 09-Dec-2022
### Updated
- Merged `is_installed` method into utilities.

## Version 4.3.6 - 08-Dec-2022
### Fixed
- Fixed package removal.

## Version 4.3.5 - 07-Dec-2022
### Updated
- Improved code style.

### Fixed
- Fixed flag parameter handling.

## Version 4.3.4 - 02-Dec-2022
### Updated
- Removed `dataclasses` and switched to `__init__`.
- Improved version print command.

### Added
- Added version to requirements in the `view` packages command.
- Added short CLI menu.

## Version 4.3.3 - 01-Dec-2022
### Fixed
- Fixed blacklist file permissions to 0644.
- Fixed typo in `slpkg.toml` configuration file.
- Fixed `slpkg.toml` configuration handling.

### Updated
- Improved OS architecture handling in configurations.

## Version 4.3.2 - 28-Nov-2022
### Fixed
- Fixed removal of multiple packages with dependencies.

### Updated
- Switched to Python TOML for loading configuration files.

## Version 4.3.1 - 26-Nov-2022
### Added
- Added category display in the `view` command.
- Added Slackware repository version display.

### Fixed
- Fixed package removal for packages with matching names.
- Fixed installation of packages with correct SBo tags.

## Version 4.3.0 - 23-Nov-2022
### Added
- Added messages for blacklisted packages.
- Added homepage display in the `view` command.

### Updated
- Improved CLI menu.

## Version 4.2.9 - 19-Nov-2022
### Fixed
- Fixed `slpkg upgrade` failure when a package is blacklisted (#149).

### Updated
- Moved `%README%` to the blacklist.

### Added
- Added maintainer information in the `view` command (#150).

## Version 4.2.8 - 06-Nov-2022
### Updated
- Ensured verification of SBo script existence before patching the tag.

## Version 4.2.7 - 05-Nov-2022
### Fixed
- Switched to checking `ChangeLog.txt` files by size.

## Version 4.2.6 - 03-Nov-2022
### Fixed
- Fixed verification of `ChangeLog.txt` file existence.

## Version 4.2.5 - 01-Nov-2022
### Added
- Added command to check for news in `ChangeLog.txt`.

### Updated
- Updated manpage.

## Version 4.2.4 - 30-Oct-2022
### Added
- Added patching of SBo TAG from the configuration file.
- Added downloading of SlackBuild scripts in the `view` command.

### Updated
- Improved CLI help menu.

## Version 4.2.3 - 28-Oct-2022
### Updated
- Ensured creation of all necessary paths from the configuration file.
- Improved log cleaning and dependency viewing.

### Added
- Added verification for database file existence.
- Added check for package existence in the database before upgrades.

## Version 4.2.2 - 20-Oct-2022
### Updated
- Removed version checking for `--skip-installed` option.
- Removed unused configurations.
- Renamed `search` command to `view`.

### Added
- Added new `search` command to search and match packages from repositories.

## Version 4.2.1 - 18-Oct-2022
### Added
- Added printing of README file in the `search` option.

### Updated
- Improved configurations for SBo repository.

## Version 4.2.0 - 14-Oct-2022
### Updated
- Moved `--download-only` option to commands.
- Ensured `upgrade` commands work with all options.

## Version 4.1.9 - 14-Oct-2022
### Added
- Added `--download-only` option.

## Version 4.1.8 - 06-Oct-2022
### Updated
- Updated manpage for `.yaml` files.

### Added
- Added `--skip-installed` option.

## Version 4.1.7 - 28-Sep-2022
### Fixed
- Fixed creation of `/var/lib/slpkg` directory.

## Version 4.1.6 - 26-Sep-2022
### Added
- Added missing configs folder to repository.

## Version 4.1.5 - 09-Sep-2022
### Updated
- Renamed configuration files to `.yml`.

### Fixed
- Fixed version display for `noarch` packages.

## Version 4.1.4 - 17-Jul-2022
### Added
- Added `setup.cfg` file.
- Added option to upgrade SBo packages.

## Version 4.1.3 - 26-Jun-2022
### Fixed
- Fixed `/tmp` permissions after installation.

### Updated
- Improved detection of installation binary files in `/tmp`.

## Version 4.1.2 - 24-Jun-2022
### Fixed
- Fixed installation of `noarch` packages.

## Version 4.1.1 - 23-Jun-2022
### Updated
- Improved CLI menu view with colors.
- Switched to YAML configurations.

### Added
- Added unit tests.
- Added `clean-tmp` command to delete downloaded sources from `/tmp/slpkg`.
- Added `find` command for installed packages.

## Version 4.1.0 - 20-Jun-2022
### Updated
- Rewrote `slpkg` code from scratch, supporting only the SBo repository.

## Version 4.0.2 - 13-Jun-2022
### Fixed
- Fixed database library path.

## Version 4.0.1 - 30-May-2022
### Added
- Added `SQLAlchemy` Object Relational Mapper.

## Version 4.0.0 - 29-May-2022
### Added
- Replaced `sqlite3` database with SBo repository.
- Added `python-progress` as a dependency.

## Version 3.9.9 - 24-May-2022
### Updated
- Improved stderr error output for auto-install packages.

## Version 3.9.8 - 12-May-2022
### Fixed
- Fixed `TypeError` for `--repos=` flag.

### Updated
- Switched SlackBuild script to Bash shell.

## Version 3.9.7 - 09-May-2022
### Fixed
- Fixed stderr error output.

### Updated
- Improved dependency resolution speed.
- Renamed `--repositories` to `--repos` flag.
- Fixed updating custom repositories.
- Fixed manual repository passing.

## Version 3.9.6 - 02-Apr-2022
### Updated
- Improved package version comparison during distribution upgrades.

## Version 3.9.5 - 02-Apr-2022
### Fixed
- Fixed `ONLY_INSTALLED` configuration variable when enabled.

## Version 3.9.4 - 26-Mar-2022
### Fixed
- Fixed virtual environment check before execution.

## Version 3.9.3 - 13-Feb-2022
### Updated
- Fixed installation crash when no `TESTING` file is present.

## Version 3.9.2 - 06-Feb-2022
### Updated
- Updated Slackware mirrors.
- Updated copyright year.
- Removed `urllib3` dependency, as it is now part of Slackware.

## Version 3.9.1 - 01-Jan-2021
### Updated
- Updated copyright year.

### Fixed
- Fixed `--checklist` and `resolve-off` flags (#129).
- Fixed custom repository handling.

## Version 3.9.0 - 21-Jun-2020
### Fixed
- Fixed `--checklist` flag compatibility with `--upgrade` option.

## Version 3.8.9 - 03-Jun-2020
### Fixed
- Fixed Slackware distribution `--upgrade` flag.

## Version 3.8.8 - 20-May-2020
### Fixed
- Fixed variable name for patches upgrade option.

## Version 3.8.7 - 01-Apr-2020
### Fixed
- Fixed `--checklist` flag functionality for versions 3.8.1 to 3.8.6 (#127).

## Version 3.8.6 - 22-Mar-2020
### Fixed
- Fixed `pkg_not_found` message function arguments.

## Version 3.8.5 - 05-Mar-2020
### Added
- Added `set export variable $TAG` (#126).

## Version 3.8.4 - 25-Feb-2020
### Fixed
- Fixed retrieval of MD5SUM from incorrect info file returning `None`.

### Updated
- Updated Slackware mirrors.

## Version 3.8.3 - 21-Feb-2020
### Fixed
- Fixed package counting for binary repositories.

### Added
- Added proxy server support.

## Version 3.8.2 - 15-Feb-2020
### Fixed
- Fixed SBo repository package and version viewing.
- Fixed `msb` repository `PACKAGES.txt` file.
- Fixed distribution upgrades with `-c`, `--check` option.

### Added
- Added multi-package management in blacklist files.

## Version 3.8.1 - 13-Feb-2020
### Fixed
- Fixed double installation from Slackware regular repository and patches directory (#122).

### Updated
- Removed status progress bar.
- Improved setup and installation processes.
- Simplified blacklist management.

## Version 3.8.0 - 05-Feb-2020
### Added
- Rewrote significant portions of the code to support Python 3, with potential for future bug fixes.

### Fixed
- Fixed merging files with Slackware repository for current and Slack versions.

### Updated
- Improved code for Python 3 compatibility.

## Version 3.7.4 - 20-Dec-2019
### Fixed
- Fixed `UnicodeDecodeError: 'utf-8' codec can't decode byte`.

## Version 3.7.3 - 11-Dec-2019
### Fixed
- Fixed Slackware-current handling for Alien Bob’s 20191130 release (#119).
- Improved repository update class method calls.
- Replaced `requests` dependency with `urllib3`.
- Improved code style for Python 3 compatibility.

## Version 3.7.2 - 06-Dec-2019
### Fixed
- Fixed handling of `ConnectionError` in `requests`.

## Version 3.7.1 - 03-Dec-2019
### Updated
- Updated `pythondialog` dependency.
- Updated Slackware mirrors.
- Improved `pip` installation method.
- Enhanced `setup.py` for Python 3.
- Improved `print` function for Python 3 format.

### Added
- Replaced built-in `urllib` with `python-requests` dependency.

## Version 3.7.0 - 01-Dec-2019
### Updated
- Switched to Python 3.

## Version 3.4.3 - 19-May-2019
### Updated
- Updated `gen_repos_files.sh` to version 1.94.

### Fixed
- Fixed downloader recognition of `+` character.
- Fixed building from sources with `+` in names.

## Version 3.4.2 - 23-Jan-2019
### Fixed
- Fixed deletion of build folder in network option.

## Version 3.4.1 - 23-Jan-2019
### Fixed
- Fixed manpage.

## Version 3.4.0 - 21-Jan-2019
### Updated
- Updated manpage.
- Converted examples, repositories, and install text files to Markdown format.
- Merged `sbo/remove.py` into `slpkg/remove.py`.

### Fixed
- Fixed updating `slpkg` from the GitLab repository.

### Added
- Added `clean-tmp` command to remove packages and sources from `/tmp/slpkg/`.
- Added support for `elilo` and `grub` bootloader upgrades after kernel upgrades.
- Added viewing and removal of third-party packages.
- Added file size display for removed packages.

## Version 3.3.9 - 14-Jan-2019
### Updated
- Updated README and added example text file.
- Improved checklist error messages.
- Removed unnecessary `ALL` arguments.

### Added
- Added support for `elilo` and `grub` bootloader upgrades.
- Added viewing and removal of third-party packages.
- Added file size display for removed packages.

## Version 3.3.8 - 09-Jun-2018
### Fixed
- Fixed `aria2c` download path for optional downloader.

### Updated
- Switched to GitLab repository.

## Version 3.3.7 - 22-Apr-2018
### Fixed
- Fixed downloading `v3.3.6.tar.gz` file (#109).

## Version 3.3.6 - 21-Apr-2018
### Fixed
- Fixed `pip` install with logo printing (#106).

## Version 3.3.5 - 01-Apr-2018
### Fixed
- Fixed `pip` install failure (#106).

### Updated
- Updated Slackware mirrors.

## Version 3.3.4 - 10-Jan-2018
### Added
- Added file size display per package for `-f`, `--find` option.

## Version 3.3.3 - 01-Jan-2018
### Updated
- Updated `README.rst` for Python modules.
- Temporarily removed Python 3 support until the next Slackware release.
- Updated Slackware mirrors.

## Version 3.3.2 - 21-Oct-2017
### Fixed
- Fixed dependency issues (#97).
- Updated `msb` repository to version 1.18.

### Updated
- Updated Slackware mirrors.

## Version 3.3.1 - 07-Oct-2017
### Added
- Added Slackware version setting via `/etc/slpkg/slpkg.conf`.
- Added computer architecture setting via `/etc/slpkg/slpkg.conf`.

## Version 3.3.0 - 01-Oct-2017
### Fixed
- Fixed `TypeError: stat() argument 1 must be encoded string without null bytes, not str` (#100).
- Fixed file script check before build (`IOError: [Errno 2] No such file or directory`).

## Version 3.2.9 - 24-Sep-2017
### Fixed
- Fixed dependency issues (#97).

### Added
- Added support for `patches/` directory in Slackware repository (#98).

## Version 3.2.8 - 06-Aug-2017
### Fixed
- Fixed package return after build.

### Updated
- Improved build error messages.

## Version 3.2.7 - 09-Apr-2017
### Updated
- Updated Alien’s repositories (`alien`, `ktown`, `multi`) (#83, thanks to travis-82).
- Updated Rworkman’s repository (`rlw`) (#83).
- Added package security messages for network and SBo repositories.

### Added
- Added `sbosrcarch` as a secondary repository for source files (#82, thanks to travis-82).
- Added rebuilding of SBo packages during upgrades (#85, thanks to bhreach).

## Version 3.2.6 - 22-Feb-2017
### Updated
- Improved configuration file pattern.

### Added
- Added support for special packages requiring attention (e.g., OpenGL 32-Bit Libs after upgrade, #81, thanks to Edward W. Koenig and Inukaze).
- Added `pkg_security` configuration file.

## Version 3.2.5 - 17-Feb-2017
### Updated
- Updated URL for `mles/mled` repository (thanks to Kiki Novak).
- Switched to `i586` architecture for SBo repository.
- Disabled progress bar by default.

### Fixed
- Fixed exit codes (#73, #79).

## Version 3.2.4 - 10-Feb-2017
### Updated
- Switched SlackBuild script to `i586` architecture.
- Renamed `slackr` repository to `conraid`.
- Updated `MATE` repository to support Slackware `-current` x86_64.

### Added
- Added `Cinnamon` repository.
- Added `Connochaetos` (slack-n-free) repository.
- Added `Microlinux` repositories (`desktop`, `server`, `extras`).

### Fixed
- Fixed package list upgrades.
- Fixed `MATE` repository update checks.

## Version 3.2.3 - 07-Feb-2017
### Updated
- Updated copyright year.
- Updated Slackware mirrors.

### Fixed
- Fixed package list updates after fresh installation (`IOError: [Errno 2] No such file or directory`).

## Version 3.2.2 - 26-Oct-2016
### Added
- Added Python 3 support with `2to3` tool.
- Added building and installation with Python 3.

## Version 3.2.1 - 25-Oct-2016
### Fixed
- Fixed exit code return when packages for installation are not found (#73).

## Version 3.2.0 - 19-Oct-2016
### Added
- Added `rlworkman.deps` dependency configuration file.

### Fixed
- Fixed `IndexError: list index out of range` for tracking arguments.

### Updated
- Updated Rworkman’s (`rlw`) repository dependencies for Slackware 14.2.

## Version 3.1.9 - 17-Oct-2016
### Updated
- Switched to version 1.16 for `msb` repository.

### Fixed
- Fixed dependency resolution for binary repositories.
- Fixed dependency removal for binary repositories.

### Removed
- Removed `studioware` binary repository due to switch to SlackBuild type.

## Version 3.1.8 - 11-Oct-2016
### Added
- Added rebuilding of SBo packages and reinstallation of binary packages.
- Added Slackware package management tools (thanks to Thomas Szteliga, #71).

### Fixed
- Fixed repository error message display without usage.
- Fixed package counting in `deps-status` option.

### Updated
- Improved help and usage messages.
- Updated Slackware mirrors.
- Merged `--deps` into `--check-deps` flag for the `remove` argument.

## Version 3.1.7 - 14-Jul-2016
### Fixed
- Fixed updating and upgrading specific repositories (#69).

## Version 3.1.6 - 06-Jul-2016
### Updated
- Updated `slackr` (Conraid’s) repository URL.
- Removed `aaa_elflibs` from blacklist.
- Updated Slackware mirrors.

## Version 3.1.5 - 26-May-2016
### Fixed
- Fixed `-l`, `--list` option compatibility with all arguments.
- Fixed `TypeError` in tracking option for binary repositories.

### Updated
- Improved code style.

## Version 3.1.4 - 11-May-2016
### Updated
- Updated `slackers.it` default repository.

## Version 3.1.3 - 15-Apr-2016
### Fixed
- Fixed handling of local SBo repositories.

## Version 3.1.2 - 24-Feb-2016
### Fixed
- Fixed `AttributeError: LooseVersion instance has no attribute 'version'`.
- Removed redundant code.

## Version 3.1.1 - 23-Feb-2016
### Added
- Added option to prevent package downgrades via configuration file.

## Version 3.1.0 - 17-Feb-2016
### Fixed
- Fixed downloading packages for x86 architecture in `slonly` repository (#59).
- Fixed continuing build and install for SBo packages with dead source links.

### Updated
- Improved status toolbar.

## Version 3.0.9 - 09-Feb-2016
### Fixed
- Fixed listing installed packages from repositories by name only (#58).
- Fixed handling of `+` character in sources.

## Version 3.0.8 - 29-Jan-2016
### Added
- Added `--name` flag in `list` option to show only package names.

### Fixed
- Fixed duplicate packages in `ktown` repository with `list` option.

## Version 3.0.7 - 26-Jan-2016
### Updated
- Improved help menu.
- Adjusted argument positions for `deps-status` with `--tree` and `--graph=` options.
- Updated Slackware mirrors.

## Version 3.0.6 - 22-Jan-2016
### Fixed
- Fixed `IndexError: list index out of range` when removing packages with `--tag` option.

### Updated
- Updated `README.rst` file.
- Improved usage and help options.
- Adjusted argument positions for `--desc`, `--network`, and `--tracking` options.
- Updated Slackware mirrors.

## Version 3.0.5 - 06-Jan-2016
### Updated
- Improved argument positioning for `queue` and `blacklist` in `--add` and `--remove` flags.
- Updated usage arguments.
- Updated file licenses.

## Version 3.0.4 - 30-Dec-2015
### Fixed
- Fixed installation of `chkrootkit` (#53).
- Prevented reinstallation of already installed binary packages.
- Fixed reference message when removing one package.

### Updated
- Updated Slackware mirrors.

## Version 3.0.3 - 01-Dec-2015
### Fixed
- Fixed upgrading/installing `nouveau` in Slackware repository (#55).

### Updated
- Updated Slackware mirrors.

## Version 3.0.2 - 19-Nov-2015
### Fixed
- Fixed string-to-float conversion error when removing packages (#52).

## Version 3.0.1 - 12-Nov-2015
### Added
- Added `--download-only` option to download packages and dependencies without installation.
- Added `--directory-prefix=` option to specify download directories.

### Fixed
- Improved code style.

## Version 3.0.0 - 15-Oct-2015
### Fixed
- Fixed checksum return for SBo repository.

## Version 2.9.7 - 09-Oct-2015
### Fixed
- Fixed finding SBo Slackware binary packages in `/tmp`.

## Version 2.9.6 - 03-Oct-2015
### Fixed
- Fixed installation failure for `nvidia-kernel` (#46).
- Fixed inconsistent version issues during builds (#48).

## Version 2.9.5 - 01-Oct-2015
### Updated
- Improved root privilege checking.
- Removed header from usage.

## Version 2.9.4 - 24-Sep-2015
### Updated
- Improved handling of `KeyboardInterrupt` in `main.py`.

### Fixed
- Fixed upgrading packages from SBo repository.
- Fixed Pylint errors and improved code health.

## Version 2.9.3 - 23-Sep-2015
### Added
- Added default repositories file for editable URLs.
- Added `--case-ins` option for case-insensitive matching in `--tracking`.

### Fixed
- Fixed case-insensitive package matching.

## Version 2.9.2 - 21-Sep-2015
### Added
- Added screen clearing in `--network` option.

### Updated
- Improved viewing of `doinst.sh` in `--network` option if present.
- Enhanced commands in `--network` option.

### Fixed
- Fixed issue with `node-0.12.7` where `uname` and `rm` commands were not found (#43).
- Fixed incorrect prompt for zero packages (#44).
- Fixed case-insensitive package matching.
- Fixed building packages without keeping log files.
- Fixed typos.

## Version 2.9.1 - 18-Sep-2015
### Added
- Added `--deps` option in `removepkg` to remove dependencies instead of via configuration.
- Added support for `.tbz` and `.tlz` Slackware packages in auto-detect option.

## Version 2.9.0 - 18-Sep-2015
### Added
- Added quit option in `new-config` command.

### Updated
- Improved installation Bash script.
- Enhanced messages and reference messages.
- Improved image types for graphs.
- Improved viewing of SlackBuilds repository in `--network` option.

### Fixed
- Fixed typos.
- Fixed package description printing.

## Version 2.8.9 - 15-Sep-2015
### Added
- Added `--case-ins` option for case-insensitive matching.

### Fixed
- Fixed dialog utility crash on Esc key exit.

### Updated
- Improved handling of optional dependencies.
- Enhanced `--network` view commands.

## Version 2.8.8 - 14-Sep-2015
### Added
- Added `--checklist` option in `--network` option.

### Fixed
- Fixed typo in help option.

### Updated
- Improved optional dependency handling.
- Enhanced `--network` view commands.

## Version 2.8.7 - 11-Sep-2015
### Fixed
- Fixed verification of already installed dependencies before removal.

## Version 2.8.6 - 11-Sep-2015
### Added
- Added reading of `doinst.sh` file in `--network` option.
- Added editor selection via configuration file.

### Updated
- Renamed `view.py` script to `network.py`.

## Version 2.8.5 - 08-Sep-2015
### Fixed
- Fixed package removal with `--checklist` and `--check-deps` options.

## Version 2.8.4 - 08-Sep-2015
### Added
- Added `--checklist` option in `--check` for upgrading packages.

### Updated
- Updated Slackware mirrors.

## Version 2.8.3 - 07-Sep-2015
### Added
- Added updating package lists for `slack` repository after distribution upgrades.
- Added reset of `slpkg` configuration file to default values.

### Fixed
- Fixed `pip` install.

## Version 2.8.2 - 04-Sep-2015
### Updated
- Improved finding of SBo-created Slackware packages.

### Fixed
- Fixed `slackpkg` update for `ChangeLog.txt`.
- Fixed Pylint errors.

## Version 2.8.1 - 02-Sep-2015
### Fixed
- Fixed build path handling.
- Fixed verification of SBo package creation.
- Fixed autobuild source order list.

### Updated
- Removed build check.
- Improved repository enable reference.

## Version 2.8.0 - 01-Sep-2015
### Added
- Added new configuration file for repositories in `/etc/slpkg/repositories.conf`.
- Added enabling/disabling repositories via dialog utility.

### Updated
- Updated all configuration files.
- Improved command-line help logo.
- Enhanced flags for package upgrades.
- Added screen clearing after dialog utility exit.

### Fixed
- Fixed removal of `None` type packages.
- Fixed removal of old SBo folder before building.

## Version 2.7.6 - 28-Aug-2015
### Fixed
- Fixed failed checksum message (#40).
- Removed calculated size.

### Updated
- Improved printing of package lists from repositories.

## Version 2.7.5 - 25-Aug-2015
### Added
- Added `python2-pythondialog` as an optional dependency.
- Added `--checklist` option for package removal.
- Added gigabyte unit in package manager.
- Added version and size for removed dependencies.

### Updated
- Moved `Msg()` function to `self.msg`.
- Improved dependency tracking.

## Version 2.7.4 - 21-Aug-2015
### Added
- Added support for `httpie` downloader.
- Added package removal by TAG.
- Added summary for removed package sizes.

### Fixed
- Fixed dependency resolution messages for SBo repository during package searches.
- Fixed reference messages for installing and upgrading.
- Fixed build error messages.

### Updated
- Improved installation of SBo packages with specific build numbers.
- Enhanced architecture selection for SBo repository.
- Improved module import paths.

## Version 2.7.3 - 13-Aug-2015
### Added
- Added tree view for `deps-status` command.

### Fixed
- Fixed `pasture/` directory for Slackware 14.0.

### Updated
- Added comments for Slackware ARM users in `REPOSITORIES` and `slpkg.conf`.
- Improved `slackpkg` synchronization with `ChangeLog.txt`.

## Version 2.7.2 - 10-Aug-2015
### Added
- Added support for Slackware ARM.

### Fixed
- Fixed package builds with multiple sources using `--autobuild`.

### Updated
- Improved installed package management.
- Updated `setup.py` requirements.

## Version 2.7.1 - 08-Aug-2015
### Fixed
- Fixed partial name package removal (#34).
- Fixed "package not found" message during removal (#35).
- Fixed remove and install references.

## Version 2.7.0 - 06-Aug-2015
### Fixed
- Fixed `EOFError` on `Ctrl+D` interrupt.

### Updated
- Replaced `sys.exit(0)` with `raise SystemExit()` and removed unused `sys` module.
- Improved code and docstrings.
- Updated Slackware mirrors.

## Version 2.6.9 - 31-Jul-2015
### Added
- Added `new-config` command to manage `.new` configuration files.

### Fixed
- Fixed ignoring blacklisted packages with version "blacklist" in binary repositories.

### Updated
- Updated `slpkg.SlackBuild` script.
- Improved Slackware version reading function.

## Version 2.6.8 - 30-Jul-2015
### Fixed
- Fixed SBo dependency installation order.

## Version 2.6.7 - 28-Jul-2015
### Fixed
- Fixed typo (#32).

### Added
- Added optional `graph-easy` module for drawing ASCII dependency diagrams.

## Version 2.6.6 - 25-Jul-2015
### Added
- Added `deps-status` command with message for missing logs.
- Added optional `pygraphviz` module for drawing dependency image maps.

### Updated
- Improved dependency log writing with full package details.

## Version 2.6.5 - 23-Jul-2015
### Added
- Added `core/` directory creation for Slackware repository.

### Fixed
- Fixed creation of `core/` directory.

## Version 2.6.4 - 21-Jul-2015
### Updated
- Merged functions into classes.

### Fixed
- Fixed auto-detection of Slackware packages.
- Fixed dependency checks before removal.
- Fixed directory existence checks before finding.
- Fixed matching of binary installed packages with repository packages.

## Version 2.6.3 - 17-Jul-2015
### Added
- Added option to enable/disable progress status bar via configuration.

### Fixed
- Fixed SBo install and upgrade print views.
- Improved code style and complexity.
- Fixed matching of binary installed packages with repository packages.

### Updated
- Updated Slackware mirrors.
- Improved version display for SBo packages during installation or upgrades.

## Version 2.6.2 - 16-Jul-2015
### Added
- Added health check for installed packages.

### Fixed
- Fixed removal of directories from Slackware repository during package list recreation (#29).
- Added support for Slackware version 13.37 (#28).
- Fixed fresh installation issues (#30).

## Version 2.6.1 - 15-Jul-2015
### Fixed
- Fixed retrieval of installed versions.
- Fixed matching of `_SBo` package names with installed names.

### Updated
- Improved initialization method for file reading in downloads.

## Version 2.6.0 - 08-Jul-2015
### Added
- Added auto-detection of Slackware packages for installation.

### Updated
- Improved toolbar progressive status.

### Fixed
- Fixed visibility of options without colors.
- Fixed dependency removal checks (#26).

## Version 2.5.9 - 02-Jul-2015
### Fixed
- Fixed printing of package content lists.
- Fixed Alien `-current` repository.
- Fixed `multi -current` repository.

### Added
- Added support for `slonly -current` (x86_64) repository.

## Version 2.5.8 - 28-Jun-2015
### Fixed
- Fixed checksum for Alien repository.

## Version 2.5.7 - 28-Jun-2015
### Fixed
- Fixed double packages in Alien repository.
- Fixed dependency resolution for binary packages.

### Updated
- Changed mirror for Alien repository.

## Version 2.5.6 - 25-Jun-2015
### Fixed
- Fixed capital letter default for message prompts (thanks to Thomas Szteliga).
- Reduced source code complexity.

### Added
- Added `MAKEFLAGS` option in `/etc/slpkg/slpkg.conf` (thanks to Brenton Earl).

## Version 2.5.5 - 23-Jun-2015
### Added
- Added summary for `--FIND`, `--check`, and `repo-list` options.

### Updated
- Improved package view alignment.
- Enhanced repository view lists.

## Version 2.5.4 - 22-Jun-2015
### Added
- Added support for local repositories via `repo-add` command.
- Added package skipping by repository or local sources.

### Fixed
- Fixed repository existence check during package upgrades.
- Fixed `AttributeError: 'list' object has no attribute 'splitlines'` in `--tracking` (thanks to Brenton Earl).
- Fixed repository existence/enabled checks during upgrades.
- Fixed custom repository updates.

### Updated
- Improved toolbar timing.

## Version 2.5.3 - 20-Jun-2015
### Added
- Added blacklist support by repository priority.
- Added `wget`, `curl`, and `aria2c` downloaders.
- Added support for downloading `jdk` from SBo repository.

### Fixed
- Fixed dependency resolution classes.
- Fixed adding/removing packages from blacklist and queue.

## Version 2.5.2 - 19-Jun-2015
### Added
- Added repository check in blacklist.

### Updated
- Improved blacklist options.

### Fixed
- Fixed Pylint errors.

## Version 2.5.1 - 14-Jun-2015
### Added
- Added checking of repository `ChangeLog.txt` with `slpkg --check [repo]`.

### Fixed
- Fixed argument typo.

## Version 2.5.0 - 12-Jun-2015
### Added
- Added full support for Slackware commands `installpkg`, `upgradepkg`, and `removepkg` with all options; merged `--reinstall` into `--upgradepkg`.
- Added printing of installed versions.
- Added dependency usage check before removal.
- Added `MSB` (MATE) to default repositories.
- Added specific repository updates/upgrades.

### Fixed
- Fixed `slonly` repository `ChangeLog.txt` link.
- Removed `foo.pkg` selection; use variable `pkgs="pip brasero pylint"` instead.
- Fixed binary dependency resolution.
- Fixed `slackers.it` mirror.
- Ignored inactive SBo repository.

## Version 2.4.4 - 10-Jun-2015
### Fixed
- Fixed `AttributeError: 'Update' object has no attribute 'meta'` during repository updates.

## Version 2.4.3 - 10-Jun-2015
### Added
- Added long options.

### Fixed
- Fixed `repo_data()` function `TypeError`.
- Fixed SBo version comparison.
- Improved code style.

## Version 2.4.2 - 04-Jun-2015
### Fixed
- Fixed `TypeError` in `repo_data()` function.
- Fixed SBo version comparison.
- Improved code style.

## Version 2.4.1 - 04-Jun-2015
### Added
- Added option to upgrade only installed distribution packages.
- Added option to enable/disable dependency resolution.

### Fixed
- Fixed package upgrades.
- Fixed checksum on/off handling.
- Fixed dependency resolution for Slackware binary package upgrades.

## Version 2.4.0 - 02-Jun-2015
### Fixed
- Fixed comments in `--help` option.

### Added
- Added option to skip packages during upgrades.

## Version 2.3.6 - 30-May-2015
### Fixed
- Fixed input of the first package during multi-package searches with `-F`.

## Version 2.3.5 - 30-May-2015
### Fixed
- Fixed version display for SBo packages with `-F` option.

## Version 2.3.4 - 28-May-2015
### Fixed
- Fixed argument comments.
- Fixed compression of SlackBuild packages.
- Fixed binary dependency and size handling.
- Fixed Pylint errors.
- Fixed `rlw` repository package dependencies.

### Added
- Added package finding from enabled repositories.
- Added `clean.py` script to remove data.

## Version 2.3.3 - 23-May-2015
### Fixed
- Fixed `ZeroDivisionError` during binary package installation.
- Fixed `OSError` for non-existent paths.

## Version 2.3.2 - 21-May-2015
### Fixed
- Fixed arguments and options.
- Removed package version display during upgrades to avoid conflicts.
- Fixed file license.

## Version 2.3.1 - 14-May-2015
### Added
- Added synchronization with `slackpkg` to update `ChangeLog.txt` during distribution upgrades.

## Version 2.2.9 - 24-Apr-2015
### Fixed
- Fixed references for installed packages after distribution upgrades.
- Fixed double references for installed SBo packages.
- Fixed clearing of master SBo packages.

## Version 2.2.8 - 23-Apr-2015
### Fixed
- Fixed adding new packages during upgrades.
- Fixed manpage.
- Fixed `TypeError: 'NoneType' object has no attribute '__getitem__'` for missing SBo links (thanks to R S Ananda Murthy).
- Fixed `slackbuilds.org` `ChangeLog.txt` URL.
- Fixed `install.sh` script.
- Fixed `binary/install.py`, `sbo/slackbuild.py`, and `slack/patches.py` classes.
- Fixed package counting during distribution upgrades.

## Version 2.2.7 - 18-Mar-2015
### Added
- Added Bash and Fish completion files.

### Fixed
- Fixed synchronization issues during SBo repository upgrades.
- Fixed spacing in view displays.

## Version 2.2.6 - 26-Feb-2015
### Added
- Added download counter.

### Fixed
- Fixed Slackware release message.

## Version 2.2.5 - 24-Feb-2015
### Fixed
- Fixed error handling.
- Renamed `VERSION` to `RELEASE` in configuration file.
- Merged functions and reduced `__metadata__` complexity.
- Fixed `SlackBuild` and install scripts.
- Renamed `re-create` command to `upgrade`.
- Fixed `IOError: [Errno 13] Permission denied` as user.
- Fixed Alien repository checksums.

## Version 2.2.3 - 16-Feb-2015
### Fixed
- Fixed `slpkg.SlackBuild` script support for `.zip` archives.
- Fixed overwriting of new SBo scripts.
- Fixed master package removal with dependencies.

## Version 2.2.2 - 11-Feb-2015
### Added
- Added display of hidden matching SBo packages.

## Version 2.2.1 - 06-Feb-2015
### Added
- Added support for multi-package handling.
- Added variable passing to scripts.
- Added support for `file.pkg` instead of `[package...]` or `[package]`.

### Fixed
- Fixed key error for incorrect repository names.
- Renamed `BUILD` to `BUILD_PATH` in `slpkg.conf`.
- Fixed installation with modified `OUTPUT` variable.
- Fixed view list display in `-l` option.
- Fixed installed package display in `-f` and `-l` options.

## Version 2.2.0 - 08-Jan-2015
### Fixed
- Fixed queue downloads.
- Fixed find argument.
- Renamed `repolist` and `repoinfo` to `repo-list` and `repo-info`.
- Fixed installed package list.

### Added
- Added custom binary repository support.
- Added Slackware `patches` repository in `PACKAGES.txt`.
- Added Alien’s restricted repository.
- Added `wget` option.
- Added default repository display in `repo-list`.

## Version 2.1.5 - 27-Dec-2014
### Added
- Added `slacker.it`, `slackonly.com`, Alien’s `ktown`, Alien’s `multilib`, `Slacke E17` and `E18`, `SalixOS`, and `Slackel` repositories.
- Added `re-create` command.
- Added `repolist` command.
- Added `repoinfo` command.

### Fixed
- Fixed ignoring hidden files in `/var/log/packages/`.
- Fixed arguments.

## Version 2.1.4 - 16-Dec-2014
### Added
- Added `update` command and removed auto-update package lists.
- Added `slpkg` self-update.

### Fixed
- Fixed `UnboundLocalError: local variable 'md5' referenced before assignment` for Alien repository updates (thanks to Jack Kiersey).
- Fixed checksums for Slackware package updates.

## Version 2.1.3 - 06-Dec-2014
### Fixed
- Fixed `IndexError: tuple index out of range` during SBo upgrades.

## Version 2.1.2 - 04-Dec-2014
### Added
- Added checksum support for all repositories.

### Fixed
- Fixed download modules.

## Version 2.1.1 - 01-Dec-2014
### Added
- Added repository selection options in `/etc/slpkg/slpkg.conf`.
- Added options to skip unsupported and untested packages.

### Fixed
- Fixed `TypeError` for unsupported/untested SBo packages.

## Version 2.1.0 - 28-Nov-2014
### Fixed
- Fixed build path handling.
- Fixed directory creation if not existent.

### Added
- Added `studioware` (studio) repository.

## Version 2.0.9 - 26-Nov-2014
### Fixed
- Fixed `setup.py` to install configuration files after checksum.
- Fixed viewing of `slpkg` configuration file.

## Version 2.0.8 - 25-Nov-2014
### Added
- Added additional options in `slpkg.conf`.

## Version 2.0.7 - 22-Nov-2014
### Added
- Added more options in `slpkg.conf`.
- Added `slackware-mirrors` file in `/etc/slpkg`.

### Fixed
- Fixed upgrading of installed Slackware packages.

## Version 2.0.6 - 18-Nov-2014
### Fixed
- Fixed `setup.py` file.

## Version 2.0.5 - 18-Nov-2014
### Added
- Added `/etc/slpkg.conf` file.
- Moved `--current` switch to `/etc/slpkg.conf`.
- Added local `PACKAGES.TXT` for Slackware repository.
- Added options to view package descriptions.
- Added repository support in tracking dependencies with `-t`.
- Added configuration file management.

### Fixed
- Fixed upgrading of binary packages.

## Version 2.0.4 - 07-Nov-2014
### Added
- Added Robby Workman, Alien Bob (Eric Hameleers), and `slacky.eu` repositories.

### Fixed
- Fixed remove list reference.

## Version 2.0.3 - 29-Oct-2014
### Fixed
- Fixed arguments.
- Fixed dependency logs.
- Fixed Pydoc pager.
- Fixed list package paging.

## Version 2.0.2 - 21-Oct-2014
### Fixed
- Fixed source code.

## Version 2.0.1 - 20-Oct-2014
### Fixed
- Fixed MD5 checksum failures.
- Fixed downloading all sources before building in view options.

## Version 2.0.0 - 15-Oct-2014
### Fixed
- Aligned code with PEP8 style.
- Fixed SBo architecture handling.
- Fixed package splitting.

## Version 1.9.9 - 11-Oct-2014
### Added
- Added queue options.

## Version 1.9.8 - 07-Oct-2014
### Fixed
- Fixed source code updates.

## Version 1.9.7 - 06-Oct-2014
### Fixed
- Fixed `UnboundLocalError: local variable 'arch' referenced before assignment`.

## Version 1.9.6 - 04-Oct-2014
### Fixed
- Fixed installation of packages from Slackware repository.

## Version 1.9.5 - 04-Oct-2014
### Fixed
- Added `aaa_elflibs` to blacklist.
- Fixed current version upgrades to only include installed packages.
- Fixed gzip manpage in `setup.py`.
- Fixed blacklist configuration file installation via `setup.py`.
- Added GB unit support in Slackware repository.

## Version 1.9.4 - 01-Oct-2014
### Added
- Added support for installing packages from Slackware current repository.
- Added support for upgrading the entire Slackware current tree.

### Fixed
- Fixed arguments.

## Version 1.9.3 - 29-Sep-2014
### Added
- Added blacklist configuration file.
- Added blacklist options.

## Version 1.9.2 - 27-Sep-2014
### Fixed
- Removed `argparse`.
- Created downloader module with `wget`.

## Version 1.9.1 - 25-Sep-2014
### Fixed
- Fixed updating SlackBuilds packages in version 1.9.0.
- Fixed architecture in SBo upgrades.

## Version 1.9.0 - 24-Sep-2014
### Fixed
- Fixed arguments.
- Replaced `less` command with `pydoc`.

## Version 1.8.9 - 23-Sep-2014
### Added
- Added short package descriptions.
- Added viewing of matching packages from SBo repository.

### Fixed
- Fixed opening/closing of files like `SLACKBUILDS.TXT`.

## Version 1.8.8 - 22-Sep-2014
### Fixed
- Fixed package alignment in views.
- Fixed build time handling.

### Added
- Added dependency searching from local `SLACKBUILDS.TXT` file.

## Version 1.8.7 - 19-Sep-2014
### Fixed
- Fixed build time handling.

## Version 1.8.6 - 14-Sep-2014
### Fixed
- Fixed references for installing or upgrading.
- Updated finding of installed packages.

### Added
- Added total file size display for installed packages.
- Added highlighting for upgraded packages from Slackware repository.

## Version 1.8.5 - 13-Sep-2014
### Fixed
- Fixed KB to MB conversion.
- Fixed building sources with spaces in filenames (e.g., `Sublime Text 2.0.2 x64.tar.bz2`).

## Version 1.8.4 - 10-Sep-2014
### Added
- Added MD5SUM file checking.
- Added build time tracking.

## Version 1.8.3 - 08-Sep-2014
### Fixed
- Fixed messages.

## Version 1.8.2 - 08-Sep-2014
### Fixed
- Fixed dependency resolution for `-c sbo upgrade` option.
- Fixed SBo summary updates.

### Added
- Added build log file.

## Version 1.8.1 - 04-Sep-2014
### Fixed
- Fixed `install.sh` script for `wget` downloading `.tar.gz` archives.
- Fixed installation of packages like `adobe-reader`.

## Version 1.8.0 - 02-Sep-2014
### Fixed
- Fixed architecture view for dependencies in `-s sbo <package>`.
- Fixed version finding for `-s sbo <package>`.
- Removed unnecessary package removal after downloads.
- Fixed `wget -N` command issues for some packages.

## Version 1.7.9 - 30-Aug-2014
### Added
- Added `extra` and `pasture` packages from the official Slackware tree.
- Added `install.sh` script.

### Fixed
- Fixed removal of destination files after copying to SBo script directory.
- Fixed appearance of build tags for packages without tags.
- Fixed `_slack` tag handling.

## Version 1.7.8 - 28-Aug-2014
### Fixed
- Fixed `ImportError: No module named __metadata__`.

## Version 1.7.7 - 26-Aug-2014
### Fixed
- Fixed installation of `noarch` packages from SBo repository.
- Fixed handling of `%README%` as a dependency.
- Fixed arguments.
- Fixed messages.

## Version 1.7.6 - 25-Aug-2014
### Fixed
- Resolved `IndexError` for `-aa` in CLI `argparse` options.
- Corrected issues with architecture-specific configurations.

### Added
- Implemented functionality to upgrade all SlackBuilds (SBo) packages.

## Version 1.7.5 - 22-Aug-2014
### Added
- Introduced package installation reports for commands `slpkg -s sbo <package>`, `slpkg -s slack <package>`, and `slpkg -c slack upgrade`.

### Fixed
- Updated mirrors for Slackware x86 architecture.

## Version 1.7.4 - 17-Aug-2014
### Fixed
- Resolved `NameError: global name 'getpass' is not defined`.

### Added
- Enabled downloading of `.asc` files for package upgrades or installations from the Slackware tree.
- Added file size calculation during package installation.
- Supported package installation or upgrades from Slackware mirrors.

## Version 1.7.3 - 16-Aug-2014
### Fixed
- Sorted package lists in the view, with thanks to Dave for assistance (https://github.com/wvragga).
- Fixed LILO reinstallation after kernel upgrades.
- Replaced system code with Python code.
- Corrected reinstallation logic for existing packages and upgrades with `slpkg -s slack <packages>`.
- Updated paths: `ChangeLog.txt` now saved in `/var/log/slpkg` and `SLACKBUILDS.TXT` in `/var/lib/slpkg/sbo_repo`.
- Improved upgrade initialization method.
- Replaced `mkdir -p` with `os.mkdir` to create directories only if they do not exist.

## Version 1.7.2 - 13-Aug-2014
### Fixed
- Improved error messages.

## Version 1.7.1 - 11-Aug-2014
### Fixed
- Resolved `OSError: [Errno 2] No such file or directory: '/tmp/slpkg/patches/'`.

### Added
- Enhanced package search functionality from slackbuilds.org.
- Improved package search reliability following `ChangeLog.txt` updates.

## Version 1.7.0 - 09-Aug-2014
### Added
- Implemented package removal with all dependencies.

## Version 1.6.9 - 04-Aug-2014
### Fixed
- Removed unnecessary code.
- Ensured creation of `/tmp/slpkg/readme/` path.

### Added
- Introduced build path to store all packages in `Slpkg_Build` directory.
- Enabled building and installing packages only if a newer version is available or the package is not installed (`slpkg -s sbo`).
- Added display of installed packages in dependency tracking.

## Version 1.6.8 - 01-Aug-2014
### Fixed
- Corrected handling of HTTP extra sources with leading spaces.
- Fixed issues with the `EMBASSY` package.
- Handled `KeyboardInterrupt` gracefully.

## Version 1.6.7 - 31-Jul-2014
### Fixed
- Improved package removal process.
- Resolved `OSError: [Errno 2] No such file or directory`.
- Enhanced error messages.

## Version 1.6.6 - 30-Jul-2014
### Fixed
- Corrected 'Wrong file' error during package builds.

## Version 1.6.5 - 28-Jul-2014
### Added
- Included `slack`, `noarch`, and other categories in package lists (`slpkg -l`).
- Added index display in package lists (`slpkg -l`).
- Enabled package installation via official Slackware mirrors.

### Fixed
- Improved error messages.

### Changed
- Updated argument display views.

## Version 1.6.3 - 28-Jul-2014
### Fixed
- Enhanced error messages.
- Resolved `IndexError: tuple index out of range`.

## Version 1.6.3 - 27-Jul-2014
### Fixed
- Corrected argument handling.
- Resolved `NameError: global name 'sp' is not defined`.

## Version 1.6.2 - 26-Jul-2014
### Added
- Enabled distribution upgrades from official Slackware mirrors (`slpkg -c slack upgrade`).

### Fixed
- Improved package change detection, increasing speed by 2x.
- Enhanced error messages.

## Version 1.6.1 - 22-Jul-2014
### Fixed
- Improved error messages.
- Corrected package removal process.
- Fixed package search functionality.
- Resolved issues with printing package contents.

## Version 1.6.0 - 21-Jul-2014
### Fixed
- Improved package removal (`slpkg -r`).
- Enhanced error messages.
- Added creation of `__metadata__`.

## Version 1.5.9 - 18-Jul-2014
### Fixed
- Implemented creation of sub-modules.

## Version 1.5.8 - 18-Jul-2014
### Fixed
- Added reporting of packages before removal (`slpkg -r`).

## Version 1.5.7 - 17-Jul-2014
### Fixed
- Resolved `IndentationError: expected an indented block`.

## Version 1.5.6 - 17-Jul-2014
### Added
- Introduced `setuptools` as a secondary installer.

## Version 1.5.5 - 15-Jul-2014
### Fixed
- Created `slpkg.py` module.

## Version 1.5.4 - 13-Jul-2014
### Fixed
- Ensured removal of files in `/tmp` directory after reading.

## Version 1.5.3 - 24-Jun-2014
### Fixed
- Resolved `IOError: [Errno 13] Permission denied` when accessing `/tmp/slpkg/readme/`.

## Version 1.5.2 - 24-Jun-2014
### Fixed
- Handled `urllib2.URLError: <urlopen error [Errno 111] Connection refused>`.

## Version 1.5.1 - 12-Jun-2014
### Fixed
- Corrected download link retrieval for architectures other than x86_64.

## Version 1.5.0 - 07-Jun-2014
### Fixed
- Ensured downloads occur only if the server file is newer than the local file.
- Improved source code.

## Version 1.4.9 - 06-Jun-2014
### Fixed
- Fixed loop exit after building in the 'network' option.
- Enhanced source code.

## Version 1.4.8 - 06-Jun-2014
### Fixed
- Improved messages for upgrade, install, reinstall, and file removal reporting.

## Version 1.4.7 - 04-Jun-2014
### Added
- Supported download, build, and install options with `-n` (network) and `-c` (check).

## Version 1.4.6 - 05-Jun-2014
### Fixed
- Corrected building of `noarch` packages.

## Version 1.4.5 - 04-Jun-2014
### Added
- Added support for FTP links.
- Implemented reporting of already installed packages.

## Version 1.4.4 - 03-Jun-2014
### Added
- Supported all extra sources.

### Fixed
- Resolved out-of-range errors in SBo version links with filenames.

## Version 1.4.3 - 03-Jun-2014
### Fixed
- Prevented building packages with more than four arguments.

## Version 1.4.2 - 03-Jun-2014
### Fixed
- Avoided building packages if already installed.
- Prevented downloading if the file is already installed.

## Version 1.4.1 - 31-May-2014
### Fixed
- Avoided downloading packages if already installed.

## Version 1.4.0 - 30-May-2014
### Fixed
- Supported installation of SBo packages with different tags.
- Prevented building and installing already installed packages.

## Version 1.3.9 - 30-May-2014
### Fixed
- Removed unnecessary SBo script search.
- Updated argument naming.
- Improved source code.

## Version 1.3.8 - 30-May-2014
### Fixed
- Resolved issues with missing dependencies.

## Version 1.3.7 - 29-May-2014
### Fixed
- Corrected link filename with version.

## Version 1.3.6 - 28-May-2014
### Added
- Enabled downloading packages with all dependencies, building, and installing them.

## Version 1.3.5 - 24-May-2014
### Fixed
- Improved "no dependencies" message in tracking function.
- Added confirmation for package deletion.

## Version 1.3.4 - 23-May-2014
### Fixed
- Resolved `sre_constants.error` for package names with special characters.

## Version 1.3.3 - 22-May-2014
### Added
- Supported downloading and building packages.

## Version 1.3.2 - 22-May-2014
### Added
- Enabled viewing of package info and SlackBuild files.

### Fixed
- Improved build argument messages.
- Resolved `TypeError: unsupported operand type(s)` in `sbo_requires_pkg` function.

## Version 1.3.1 - 21-May-2014
### Added
- Supported viewing of README files.

## Version 1.3.0 - 21-May-2014
### Fixed
- Improved `argparse` view.

## Version 1.2.9 - 21-May-2014
### Added
- Implemented dependency tracking.

## Version 1.2.8 - 20-May-2014
### Added
- Supported downloading packages from www.slackbuilds.org.
- Enabled building packages with extra sources.

## Version 1.2.7 - 20-May-2014
### Fixed
- Refactored code into functions.

## Version 1.2.6 - 20-May-2014
### Fixed
- Improved code quality and performance.

## Version 1.2.5 - 19-May-2014
### Fixed
- Corrected download source for x86_64 architecture.

## Version 1.2.4 - 19-May-2014
### Added
- Supported downloading source code by PC architecture.

## Version 1.2.3 - 19-May-2014
### Added
- Added progress bar to package searching.

### Fixed
- Improved package update checks.

## Version 1.2.2 - 19-May-2014
### Fixed
- Enhanced library repository handling.

## Version 1.2.1 - 19-May-2014
### Fixed
- Improved function implementations.

## Version 1.2.0 - 17-May-2014
### Added
- Checked if packages from www.slackbuilds.org are up-to-date.

## Version 1.1.9 - 17-May-2014
### Fixed
- Added notification message for existing packages in the remove function.

## Version 1.1.8 - 17-May-2014
### Added
- Implemented root user check.

### Fixed
- Improved package search and display.

## Version 1.1.7 - 16-May-2014
### Fixed
- Enhanced function implementations.

## Version 1.1.6 - 15-May-2014
### Fixed
- Removed redundant binary search option.

## Version 1.1.5 - 15-May-2014
### Added
- Supported multiple install, upgrade, remove, and find operations.
- Enabled searching for network SlackBuilds links and sources.

## Version 1.1.4 - 14-May-2014
### Fixed
- Updated `sbo_requires_pkg` function to avoid using `.txt` files.

## Version 1.1.3 - 14-May-2014
### Added
- Supported finding package requirements from www.slackbuilds.org.

## Version 1.1.2 - 13-May-2014
### Added
- Enabled finding existing binary packages in `/tmp` directory.

## Version 1.1.1 - 13-May-2014
### Fixed
- Improved list printout.

## Version 1.1.0 - 12-May-2014
### Added
- Supported searching from SBo and printing download links.

## Version 1.0.9 - 12-May-2014
### Fixed
- Improved warning messages and color printouts.

## Version 1.0.8 - 12-May-2014
### Added
- Supported single install argument.
- Added two options for list argument.

### Fixed
- Corrected argument handling.

## Version 1.0.7 - 11-May-2014
### Fixed
- Handled null arguments.

## Version 1.0.6 - 11-May-2014
### Fixed
- Updated SlackBuild argument handling.

## Version 1.0.5 - 10-May-2014
### Added
- Supported auto-build package selection.

### Fixed
- Updated man page and `README.rst` file.

## Version 1.0.3 - 10-May-2014
### Added
- Implemented `find_package` function.

## Version 1.0.2 - 10-May-2014
### Fixed
- Improved `setup.py` file.
- Compressed man page `slpkg.8` with gzip.

## Version 1.0.1 - 09-May-2014
### Added
- Supported installation of man pages.

## Version 1.0.0 - 09-May-2014
### Added
- Introduced man page.

## Version 0.0.3 - 09-May-2014
### Added
- Supported warning messages for package removal.
- Replaced remove command.

## Version 0.0.2 - 08-May-2014
### Added
- Supported package reinstallation.

### Fixed
- Improved version printout.

## Version 0.0.1 - 07-May-2014
### Notes
- Released version 0.0.1, development status: Alpha.
