Giter Club home page Giter Club logo

pacup.py's Introduction

logo

Pacup

Python: 3.10+ Code style: black Codacy: grade PyPI: version

join discord Mastodon Follow join matrix

What is this?

Pacup (Pacscript Updater) is a maintainer helper tool to help maintainers update their pacscripts. It semi-automates the tedious task of updating pacscripts, and aims to make it a fun process for the maintainer!

Installation

To install the latest release run:

$ pacstall -I pacup-bin # or pip install pacup

To install the latest development build run:

$ pip install git+https://github.com/pacstall/pacup

Usage

Usage: pacup [OPTIONS] PACSCRIPTS...

Updates specified pacscripts.
If ship flag is passed, the pacscript will be prepared for shipping to upstream.
After the pacscript is prepared, it will be committed and pushed to the origin remote.
This requires you to be present in your cloned fork.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────╮
│ *    pacscripts      PACSCRIPTS...  The pacscripts to update. [default: None] [required]             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────╮
│ --show-repology       -r                                       Show the parsed repology data and     │
│                                                                exit.                                 │
│ --debug               -d                                       Turn on debugging mode.               │
│ --version             -v                                       Show the version and exit.            │
│ --ship                -s                                       Prepare the pacscript for shipping to │
│                                                                upstream.                             │
│ --install-completion          [bash|zsh|fish|powershell|pwsh]  Install completion for the specified  │
│                                                                shell.                                │
│                                                                [default: None]                       │
│ --show-completion             [bash|zsh|fish|powershell|pwsh]  Show completion for the specified     │
│                                                                shell, to copy it or customize the    │
│                                                                installation.                         │
│                                                                [default: None]                       │
│ --help                                                         Show this message and exit.           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────╯

You can get this help text by running pacup --help.

You should visit our wiki, for more information on how to use the repology key.

How does it work?

Suppose foo.pacscript is outdated.

On running pacup foo.pacscript Pacup will parse the pacscript's variables, then it compiles a list of filters specified in the repology variable in the pacscript. Then it queries the Repology API to get all the repositories which have packaged that package. After which it applies the filter to the response, and from the filtrate it considers the most common version to be the latest.

Then it replaces all occurrences of the previous version's value in the url with the latest one placeholder's value with the latest version, and downloads the new package, and generates it's hash.

Then writes the edited pacscript and installs it with Pacstall, after installation it asks the user to confirm that the installed package works. On approval the pacscript is considered successfully upgraded and the program ends.

Caveats

  • Does not work with -git pacscripts as those pacscripts are auto updating.
  • Doesn't work if a pacscript doesn't have an equivalent Repology package.

Stats

Repobeats analytics image

License

    ____             __  __
   / __ \____ ______/ / / /___
  / /_/ / __ `/ ___/ / / / __ \
 / ____/ /_/ / /__/ /_/ / /_/ /
/_/    \__,_/\___/\____/ .___/
                      /_/

Copyright (C) 2022-present

This file is part of PacUp

PacUp is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

PacUp is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with PacUp.  If not, see <https://www.gnu.org/licenses/>.

pacup.py's People

Contributors

wizard-28 avatar renovate[bot] avatar dependabot[bot] avatar pre-commit-ci[bot] avatar elsie19 avatar d-brox avatar malmeloo avatar zahrun avatar srd424 avatar

Stargazers

vbrabandt2005 avatar Givi Tsvariani avatar Diego Queiroz avatar Nikolaus Schlemm avatar Stefano Serioli avatar  avatar 0x262D avatar Valentin avatar  avatar  avatar  avatar Konstantinos Chatzilygeroudis avatar

Watchers

 avatar  avatar

pacup.py's Issues

[Bug]: version `GLIBC_2.36' not found

What happened?

[:~/Downloads] % wget https://github.com/pacstall/pacup/releases/download/2.1.0/pacup -q         
[:~/Downloads] % chmod +x ./pacup
[:~/Downloads] % ./pacup                                                                         
[581031] Error loading Python lib '/tmp/_MEIErZg9N/libpython3.11.so.1.0': dlopen: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.36' not found (required by /tmp/_MEIErZg9N/libexpat.so.1)

What do you expect to happen?

Be able to execute pacup in a jammy LTS base 'GLIBC_2.35'

Which pacscripts are affected?

All

Steps to reproduce

Execute release binary of pacup in a jammy LTS base

Version

Latest Release

Relevant log output

No response

[Bug]: Shipping fails to push if remote branch already exists and is behind master

What happened?

pacup --ship ferdium-deb/ferdium-deb.pacscript
[...]

            :: Do you you want to delete the existing ship-ferdium-deb branch? [y/n] (y): 
            ✔ Successfully deleted ship-ferdium-deb branch
            ✔ Successfully checked out branch ship-ferdium-deb
            => Installing pacscript using pacstall

[...]

            => Shipping pacscript
            ✔ Successfully added ferdium-deb to git
            ✔ Successfully committed ferdium-deb
To github.com:Zahrun/pacstall-programs.git
 ! [rejected]          ship-ferdium-deb -> ship-ferdium-deb (non-fast-forward)
error: failed to push some refs to 'github.com:Zahrun/pacstall-programs.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ in command:813                                                                                   │
│                                                                                                  │
│ in run:526                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
CalledProcessError: Command '['git', 'push', '--set-upstream', 'origin', 'ship-ferdium-deb']' returned 
non-zero exit status 1.

During handling of the above exception, another exception occurred:

╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ in command:825                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: 'NoneType' object has no attribute 'decode'
[224578] Failed to execute script '__main__' due to unhandled exception!
[:~/UnixSync … acstall-programs/packages] ship-ferdium-deb+* 2m25s 1 ± git status
On branch ship-ferdium-deb
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        td-git/
        tok-git/

nothing added to commit but untracked files present (use "git add" to track)

What do you expect to happen?

git push --set-upstream origin ship-ferdium-deb -f, we need to force push in that case

Which pacscripts are affected?

All

Steps to reproduce

See above

Version

Latest Release

Relevant log output

PacUp 2.0.0 Sirius

Action Required: Fix Renovate Configuration

There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.

Location: renovate.json
Error type: Invalid JSON (parsing failed)
Message: Syntax error near # ____

[Feature]: Packages not listed on Repology

Is your feature related to a problem? Please describe.

Currently, Pacup supports packages that list a Repology filter in their Pacscript. However, some packages are not listed on Repology, especially third-party or proprietary software, e.g. Android Studio.

A clear and concise description of what you want to happen.

Ideally, it would be possible in the Pacscript to specify some arbitrary script to get the latest version number. There is prior art for providing this sort of feature, and I submit that it might be good to follow these examples in a similar implementation for Pacup:

Describe alternatives you've considered

If we don't want to go this route, then an alternative that would provide some of the same benefit with less complexity would be to allow running Pacup on Pacscripts that do not specify a Repology filter, by requiring the version number to be updated manually, but still taking care of the other steps automatically.

Additional context

No response

[Bug]: No repology filters found in the pacscript

What happened?

No repology filters found in the pacscript

What do you expect to happen?

Repology filters found in the pacscript

Which pacscripts are affected?

fsearch-deb

Steps to reproduce

`pacup --ship fsearch-deb/fsearch-deb.pacscript

Version

Latest Release

Relevant log output

[10/23/23 13:18:24] INFO     PacUp 2.1.0 Dagon                                               __main__.py:326
                    INFO     Parsing 1 pacscripts                                            __main__.py:337
                    INFO     Parsing fsearch-deb.pacscript...                                  parser.py:214
                    INFO     Sourcing fsearch-deb.pacscript...                                 parser.py:234
                    INFO     Found repology: repology=("project: fsearch")                     parser.py:289
                    ERROR    Failed to parse repology filters for fsearch-deb.                 parser.py:300
                    INFO     Found version: pkgver="0.2.3"                                     parser.py:250
                    INFO     Found url:                                                        parser.py:264
                             url="https://download.opensuse.org/repositories/home:/cboxdoerfer              
                             /Debian_11/amd64/fsearch_${pkgver}-1+3.1_amd64.deb"                            
                    INFO     Found hash:                                                       parser.py:277
                             hash="1ecaacb7e1f2b3eab3c15c7307bab0cbea9c0a8aa32ffc195e0d354a86d              
                             3a0f6"                                                                         
                    INFO     Found url:                                                        parser.py:264
                             url="https://download.opensuse.org/repositories/home:/cboxdoerfer              
                             /Debian_12/amd64/fsearch_${pkgver}-1+3.1_amd64.deb"                            
                    INFO     Found hash:                                                       parser.py:277
                             hash="2f8b3b9a0153499b161866df64e081777f9085c789911817178986d96c2              
                             20fcb"                                                                         
                    INFO     Found url:                                                        parser.py:264
                             url="https://download.opensuse.org/repositories/home:/cboxdoerfer              
                             /Debian_12/amd64/fsearch_${pkgver}-1+3.1_amd64.deb"                            
                    INFO     Found hash:                                                       parser.py:277
                             hash="2f8b3b9a0153499b161866df64e081777f9085c789911817178986d96c2              
                             20fcb"                                                                         
                    INFO     Found url:                                                        parser.py:264
                             url="https://download.opensuse.org/repositories/home:/cboxdoerfer              
                             /Debian_Unstable/amd64/fsearch_${pkgver}-1+3.15_amd64.deb"                     
                    INFO     Found hash:                                                       parser.py:277
                             hash="40d5453743c8bca6e15a80b6d4d035594d6629048c98b07c1d30d61a182              
                             eebd8"                                                                         
                    INFO     Found maintainer: maintainer="Zahrun <[email protected]>"         parser.py:281
                    INFO     Fetching release notes...                                         parser.py:312
                    DEBUG    parsed_pacscripts = [Pacscript(name=fsearch-deb.pacscript,      __main__.py:347
                             pkgname=fsearch, pkgver=Version(line_number=3, current=0.2.3,                  
                             latest=No repology filters found in the pacscript,                             
                             status=VersionStatuses.UNKNOWN), url=Url(line_number=21,                       
                             value=https://download.opensuse.org/repositories/home:/cboxdoer                
                             fer/Debian_12/amd64/fsearch_0.2.3-1+3.1_amd64.deb),                            
                             hash_line=22, maintainer='Zahrun <[email protected]>'                          
                             repology_filters={})]                                                          
                    INFO     Sorting parsed pacscripts by version statsuses...               __main__.py:351
                    DEBUG    oudated pacscripts = []                                         __main__.py:369
                    DEBUG    up-to-date pacscripts = []                                      __main__.py:372
                    DEBUG    newer pacscripts = []                                           __main__.py:375
                    DEBUG    unknown pacscripts = ['fsearch-deb']                            __main__.py:378
                    INFO     Adding unknown pacscripts to version statuses...                __main__.py:446
╭───────────────────────────────────────── Version statuses ─────────────────────────────────────────╮
│ ╭─────────────────────────────────────────── Unknown ────────────────────────────────────────────╮ │
│ │   Pacscript   Current                                      Latest          Maintainer          │ │
│ │  fsearch-deb    0.2.3  No repology filters found in the pacscript  Zahrun <Zahrun@github.com>  │ │
│ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰────────────────────────────────────────────────────────────────────────────────────────────────────╯
                    INFO     Updating pacscripts...                                          __main__.py:479
                    INFO     Computing summary...                                            __main__.py:839
                    DEBUG    Successfully updated pacscripts = []                            __main__.py:899
                    DEBUG    Failed to update pacscripts = []                                __main__.py:902
                    INFO     Exiting...                                                      __main__.py:906

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Rate-Limited

These updates are currently rate-limited. Click on a checkbox below to force their creation now.

  • chore(deps): update dependency pytest to v7.4.4
  • chore(deps): update dependency pyupgrade to v3.15.2
  • fix(deps): update dependency rich to v13.7.1
  • chore(deps): update dependency mypy to v1.9.0
  • chore(deps): update dependency pre-commit to v3.7.0
  • fix(deps): update dependency typer to >=0.12.3,<0.13.0
  • chore(deps): update softprops/action-gh-release action to v2
  • fix(deps): update dependency packaging to v24
  • chore(deps): lock file maintenance
  • 🔐 Create all rate-limited PRs at once 🔐

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/CD.yml
  • actions/checkout v3
  • actions/setup-python v4
  • snok/install-poetry v1
  • actions/cache v3
  • actions/upload-artifact v3
  • JRubics/poetry-publish v1.17
  • softprops/action-gh-release v1
.github/workflows/codeql-analysis.yml
  • actions/checkout v3
  • github/codeql-action v2
  • github/codeql-action v2
  • github/codeql-action v2
pep621
pyproject.toml
  • poetry-core >=1.0.0
poetry
pyproject.toml
  • python >=3.10,<4
  • httpx >=0.24,<0.25
  • rich ^13.0.0
  • typer >=0.9.0,<0.10.0
  • packaging >=23,<23.3
  • black ^23.0.0
  • codespell ^2.2.2
  • isort ^5.11.2
  • mypy ^1.0
  • pre-commit ^3.0.0
  • pytest ^7.2.0
  • pyupgrade ^3.3.1
  • pyinstaller ^5.7.0

  • Check this box to trigger a request for Renovate to run again on this repository

[Bug]: Not compatible with Click 8.1.0 released 2022-03-28

What happened?

Installation from PyPI is broken (installed script fails at startup) with the release of Click 8.1.0 on 2022-03-28 since it removes the previously-deprecated function get_terminal_size that typer depends on, and pacup depends on typer.

This is most likely an upstream bug in typer, and I will report the issue there and submit a fix if appropriate.

What do you expect to happen?

pacup should function correctly after installation.

Which pacscripts are affected?

n/a

Steps to reproduce

% python3 -m venv /tmp/venv
% /tmp/venv/bin/pip install pacup                                                       
Collecting pacup
  Using cached pacup-0.1.2-py3-none-any.whl (29 kB)
Collecting typer<0.5.0,>=0.4.0
  Using cached typer-0.4.0-py3-none-any.whl (27 kB)
Collecting rich<13.0.0,>=12.0.0
  Using cached rich-12.0.1-py3-none-any.whl (224 kB)
Collecting packaging<22.0,>=21.3
  Using cached packaging-21.3-py3-none-any.whl (40 kB)
Collecting httpx<0.23.0,>=0.22.0
  Using cached httpx-0.22.0-py3-none-any.whl (84 kB)
Collecting sniffio
  Using cached sniffio-1.2.0-py3-none-any.whl (10 kB)
Collecting rfc3986[idna2008]<2,>=1.3
  Using cached rfc3986-1.5.0-py2.py3-none-any.whl (31 kB)
Collecting certifi
  Using cached certifi-2021.10.8-py2.py3-none-any.whl (149 kB)
Collecting httpcore<0.15.0,>=0.14.5
  Using cached httpcore-0.14.7-py3-none-any.whl (68 kB)
Collecting charset-normalizer
  Using cached charset_normalizer-2.0.12-py3-none-any.whl (39 kB)
Collecting anyio==3.*
  Using cached anyio-3.5.0-py3-none-any.whl (79 kB)
Collecting h11<0.13,>=0.11
  Using cached h11-0.12.0-py3-none-any.whl (54 kB)
Collecting idna>=2.8
  Using cached idna-3.3-py3-none-any.whl (61 kB)
Collecting pyparsing!=3.0.5,>=2.0.2
  Using cached pyparsing-3.0.7-py3-none-any.whl (98 kB)
Collecting pygments<3.0.0,>=2.6.0
  Using cached Pygments-2.11.2-py3-none-any.whl (1.1 MB)
Collecting commonmark<0.10.0,>=0.9.0
  Using cached commonmark-0.9.1-py2.py3-none-any.whl (51 kB)
Collecting click<9.0.0,>=7.1.1
  Using cached click-8.1.0-py3-none-any.whl (96 kB)
Installing collected packages: sniffio, idna, rfc3986, h11, certifi, anyio, pyparsing, pygments, httpcore, commonmark, click, charset-normalizer, typer, rich, packaging, httpx, pacup
Successfully installed anyio-3.5.0 certifi-2021.10.8 charset-normalizer-2.0.12 click-8.1.0 commonmark-0.9.1 h11-0.12.0 httpcore-0.14.7 httpx-0.22.0 idna-3.3 packaging-21.3 pacup-0.1.2 pygments-2.11.2 pyparsing-3.0.7 rfc3986-1.5.0 rich-12.0.1 sniffio-1.2.0 typer-0.4.0
% /tmp/venv/bin/pacup --version  
Traceback (most recent call last):
  File "/tmp/venv/bin/pacup", line 5, in <module>
    from pacup.__main__ import main
  File "/tmp/venv/lib/python3.9/site-packages/pacup/__main__.py", line 43, in <module>
    import typer
  File "/tmp/venv/lib/python3.9/site-packages/typer/__init__.py", line 12, in <module>
    from click.termui import get_terminal_size as get_terminal_size
ImportError: cannot import name 'get_terminal_size' from 'click.termui' (/tmp/venv/lib/python3.9/site-packages/click/termui.py)

Version

Latest Release

Relevant log output

No response

[Feature]: Support for multiple URLs and hashes

Is your feature related to a problem? Please describe.

Since pacstall supports Ubuntu and Debian, and ideally different releases LTS/latest Stable/Unstable/Testing, for some packages, it is required to use multiple urls and each can have a different hash.
See for example https://github.com/pacstall/pacstall-programs/blob/master/packages/fsearch-deb/fsearch-deb.pacscript

A clear and concise description of what you want to happen.

Would be nice if pacup could update these urls and hashes from repology version change

Maybe it could detect a case structure and evaluate url and hash separately for each case

[Feature]: Installation via Pacstall

Is your feature related to a problem? Please describe.

I notice the recommended way to install Pacup is via Pip. However, I avoid installing packages any way other than the distribution package manager (APT, in my case). If a package is unavailable on APT, I write a script to package it in the Debian format, and then install the resulting package through APT.

Of course, this sort of workflow is exactly what Pacstall is supposed to replace, leading to the question: would it be desired for Pacup to be installable via Pacscript? If so, I would be happy to contribute that.

A clear and concise description of what you want to happen.

Ideally, I can run pacstall -I pacup and get started with Pacup immediately.

Describe alternatives you've considered

We could also offer installable Debian packages as downloads from GitHub Releases for Pacup, which would remove the need for self-packaging for folks who like me would prefer to avoid installing software via any means other than APT.

Additional context

No response

[Bug]: fail to evaluate url properly

What happened?

If url is determined by a variable that is derived from pkgver, pacup fails to download the updated url and to calculate the new hash.

What do you expect to happen?

Updated url is evaluated properly.

Which pacscripts are affected?

rstudio-deb

pkgver="2023.06.1.524"
ver="${pkgver:0:9}-${pkgver:10}"
url="https://download1.rstudio.org/electron/jammy/amd64/rstudio-${ver}-amd64.deb"

Steps to reproduce

pacup --ship rstudio-deb/rstudio-deb.pacscript

Version

Latest Release

Relevant log output

[09/08/23 10:24:40] INFO     PacUp 2.1.0 Dagon                                                 __main__.py:326
                    INFO     Parsing 1 pacscripts                                              __main__.py:337
                    INFO     Parsing rstudio-deb.pacscript...                                    parser.py:214
                    INFO     Sourcing rstudio-deb.pacscript...                                   parser.py:234
                    INFO     Found repology: repology=("project: ${gives}")                      parser.py:289
                    DEBUG    repology_filters = {'project': 'rstudio'}                           parser.py:302
                    INFO     Found version: pkgver="2023.06.1.524"                               parser.py:250
                    INFO     Found url:                                                          parser.py:264
                             url="https://download1.rstudio.org/electron/jammy/amd64/rstudio-${v              
                             er}-amd64.deb"                                                                   
                    INFO     Found hash:                                                         parser.py:277
                             hash="c030ec8338f1c76b3ae27997ec4411a0af43b2367dedb3d48e95c319b5425              
                             698"                                                                             
                    INFO     Found maintainer: maintainer="Zahrun <[email protected]>"           parser.py:281
                    INFO     Getting project info from repology...                              version.py:127
[09/08/23 10:24:41] INFO     Filtering...                                                       version.py:160
                    INFO     Mapping the versions to their filtered packages...                 version.py:170
                    DEBUG    filtered = [{'repo': 'aur', 'srcname': 'rstudio-desktop',          version.py:173
                             'binname': 'rstudio-desktop', 'visiblename': 'rstudio-desktop',                  
                             'version': '2023.06.2.561', 'maintainers': ['trap000d@aur'],                     
                             'licenses': ['AGPL3'], 'summary': 'A powerful and productive                     
                             integrated development environment (IDE) for R programming                       
                             language', 'status': 'newest', 'origversion': '2023.06.2.561-3'},                
                             {'repo': 'pclinuxos', 'srcname': 'rstudio', 'visiblename':                       
                             'rstudio', 'version': '2023.06.2.561', 'summary': 'RStudio IDE is                
                             a powerful and productive user interface for R', 'categories':                   
                             ['Sciences/Mathematics'], 'status': 'newest', 'origversion':                     
                             '2023.06.2.561-1pclos2023'}, {'repo': 'scoop', 'subrepo':                        
                             'extras', 'binname': 'rstudio', 'visiblename': 'rstudio',                        
                             'version': '2023.06.2-561', 'licenses': ['AGPL-3.0-only'],                       
                             'status': 'newest', 'origversion': None}, {'repo': 'slackbuilds',                
                             'srcname': 'development/rstudio-desktop', 'visiblename':                         
                             'development/rstudio-desktop', 'version': '2023.06.2+561',                       
                             'maintainers': ['[email protected]'], 'categories':                           
                             ['development'], 'status': 'newest', 'origversion': None},                       
                             {'repo': 'winget', 'srcname': 'p/Posit/RStudio', 'visiblename':                  
                             'RStudio', 'version': '2023.06.2+561', 'categories': ['ide'],                    
                             'status': 'newest', 'origversion': None}]                                        
                    DEBUG    versions = ['2023.06.2.561', '2023.06.2.561', '2023.06.2-561',     version.py:174
                             '2023.06.2+561', '2023.06.2+561']                                                
                    INFO     Selecting most common version...                                   version.py:176
                    DEBUG    selected_version = '2023.06.2.561'                                 version.py:178
                    INFO     Fetching release notes...                                           parser.py:312
                    DEBUG    parsed_pacscripts = [Pacscript(name=rstudio-deb.pacscript,        __main__.py:347
                             pkgname=rstudio, pkgver=Version(line_number=3,                                   
                             current=2023.06.1.524, latest=2023.06.2.561,                                     
                             status=VersionStatuses.OUTDATED), url=Url(line_number=5,                         
                             value=https://download1.rstudio.org/electron/jammy/amd64/rstudio-                
                             2023.06.1-524-amd64.deb), hash_line=7, maintainer='Zahrun                        
                             <Zahrun@github.com>' repology_filters={'status': 'newest'})]                     
                    INFO     Sorting parsed pacscripts by version statsuses...                 __main__.py:351
                    DEBUG    oudated pacscripts = ['rstudio-deb']                              __main__.py:369
                    DEBUG    up-to-date pacscripts = []                                        __main__.py:372
                    DEBUG    newer pacscripts = []                                             __main__.py:375
                    DEBUG    unknown pacscripts = []                                           __main__.py:378
                    INFO     Adding outdated pacscripts to version statuses...                 __main__.py:383
╭───────────────────────────── Version statuses ──────────────────────────────╮
│ ╭─────────────────────────────── Outdated ────────────────────────────────╮ │
│ │   Pacscript         Current         Latest          Maintainer          │ │
│ │  rstudio-deb  2023.06.1.524  2023.06.2.561  Zahrun <Zahrun@github.com>  │ │
│ ╰─────────────────────────────────────────────────────────────────────────╯ │
╰─────────────────────────────────────────────────────────────────────────────╯
                    INFO     Updating pacscripts...                                            __main__.py:479
=> Updating rstudio-deb pacscript (2023.06.1.524 => 2023.06.2.561)
      ❌ Could not find release notes
                    INFO     Downloading new package...

[Bug]: `--show-repology` flag doesn't quit on time

What happened?

The --show-repology flag doesn't quit after showing the parsed repology data and version statuses, and therefore Pacup starts to update the pacscript.

What do you expect to happen?

Pacup quits after showing the parsed repology data and version statuses.

Which pacscripts are affected?

Pacup UX

Steps to reproduce

  1. Run pacup -r <foo.pacscript>.
  2. See that it doesn't exit after showing the parsed repology data and version statuses.

Version

Latest Release, Development Build

Relevant log output

No response

[Feature]: git commit after a package has been updated

Is your feature related to a problem? Please describe.

Pacup automates the updating of a package, but why not commit it. It seems a very useful thing, as this would help force conventional commit style commits, along with general ease of use.

A clear and concise description of what you want to happen.

For Pacup to have a feature where it can git commit for you

Describe alternatives you've considered

  • Doing it manually
    • Tedius
  • Setting up a shell script to run pacup and git commit
    • Could easily be automated with pacup into one tool

Additional context

No response

[Bug]: KeyError: 'Content-Length'

What happened?

image

What do you expect to happen?

pacup works

Which pacscripts are affected?

  1. bitwig-studio-deb (zahrun/pacstall-programs)

Steps to reproduce

  1. pacup bitwig-studio-deb

Version

Latest Release

Relevant log output

[04/28/22 21:49:56] INFO     PacUp 0.1.2 Thyone (dev)                                   __main__.py:271
                    INFO     Parsing 1 pacscripts                                       __main__.py:282
                    INFO     Parsing bitwig-studio-deb.pacscript...                       parser.py:215
                    INFO     Sourcing bitwig-studio-deb.pacscript...                      parser.py:235
                    INFO     Found repology: repology=("project: bitwig-studio")          parser.py:290
                    DEBUG    repology_filters = {'project': 'bitwig-studio'}              parser.py:303
                    INFO     Found version: version="4.2"                                 parser.py:251
                    INFO     Found url: url="https://downloads.bitwig.com/${version}/${gi parser.py:265
                             ves}-${version}.deb"                                                      
                    INFO     Found hash: hash="848204563e6c33f35d8418b07ab16fc885ea8f447c parser.py:278
                             12f731c0ce94674084e36f"                                                   
                    INFO     Found maintainer: maintainer="Zahrun <[email protected]>"    parser.py:282
                    INFO     Getting project info from repology...                       version.py:128
[04/28/22 21:49:58] INFO     Filtering...                                                version.py:161
                    INFO     Mapping the versions to their filtered packages...          version.py:171
                    DEBUG    filtered = [{'repo': 'aur', 'srcname': 'bitwig-studio',     version.py:177
                             'binname': 'bitwig-studio', 'visiblename': 'bitwig-studio',               
                             'version': '4.2.3', 'maintainers': ['stylemistake@aur'],                  
                             'licenses': ['custom'], 'summary': 'Digital audio                         
                             workstation for music production, remixing and live                       
                             performance', 'status': 'newest', 'origversion':                          
                             '4.2.3-1'}, {'repo': 'nix_unstable', 'name':                              
                             'bitwig-studio', 'visiblename': 'bitwig-studio', 'version':               
                             '4.2.3', 'maintainers': ['[email protected]',                       
                             '[email protected]', '[email protected]'], 'licenses':               
                             ['Unfree'], 'summary': 'A digital audio workstation',                     
                             'status': 'newest', 'origversion': None}]                                 
                    DEBUG    versions = ['4.2.3', '4.2.3']                               version.py:178
                    INFO     Selecting most common version...                            version.py:180
                    DEBUG    selected_version = '4.2.3'                                  version.py:182
                    INFO     Fetching release notes...                                    parser.py:313
                    DEBUG    parsed_pacscripts =                                        __main__.py:292
                             [Pacscript(name=bitwig-studio-deb.pacscript,                              
                             pkgname=bitwig-studio, version=Version(line_number=3,                     
                             current=4.2, latest=4.2.3,                                                
                             status=VersionStatuses.OUTDATED), url=Url(line_number=4, v                
                             alue=https://downloads.bitwig.com/4.2/bitwig-studio-4.2.de                
                             b), hash_line=6, maintainer='Zahrun <[email protected]>'                  
                             repology_filters={'status': 'newest'})]                                   

                    INFO     Sorting parsed pacscripts by version statsuses...          __main__.py:296
                    DEBUG    oudated pacscripts = ['bitwig-studio-deb']                 __main__.py:314
                    DEBUG    up-to-date pacscripts = []                                 __main__.py:317
                    DEBUG    newer pacscripts = []                                      __main__.py:320
                    DEBUG    unknown pacscripts = []                                    __main__.py:323
                    INFO     Adding outdated pacscripts to version statuses...          __main__.py:328
╭────────────────────────── Version statuses ──────────────────────────╮
│ ╭──────────────────────────── Outdated ────────────────────────────╮ │
│ │      Pacscript      Current  Latest          Maintainer          │ │
│ │  bitwig-studio-deb      4.2   4.2.3  Zahrun <Zahrun@github.com>  │ │
│ ╰──────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────╯
                    INFO     Updating pacscripts...                                     __main__.py:424
=> Updating bitwig-studio-deb pacscript (4.2 => 4.2.3)
    ❌ Could not find release notes
                    INFO     Downloading new package...                                 __main__.py:459
    ▐  ⡀     ▌ Downloading package ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0%0/100 bytes-:--:-- • ?
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/aroun/.local/bin/pacup:8 in <module>                                                       │
│                                                                                                  │
│   5 from pacup.__main__ import main                                                              │
│   6 if __name__ == '__main__':                                                                   │
│   7sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])                         │
│ ❱ 8sys.exit(main())                                                                         │
│   9                                                                                              │
│                                                                                                  │
│ ╭───────────────────────────────────────── locals ─────────────────────────────────────────╮     │
│ │ __annotations__ = {}                                                                     │     │
│ │    __builtins__ = <module 'builtins' (built-in)>                                         │     │
│ │      __cached__ = None                                                                   │     │
│ │         __doc__ = None                                                                   │     │
│ │        __file__ = '/home/aroun/.local/bin/pacup'                                         │     │
│ │      __loader__ = <_frozen_importlib_external.SourceFileLoader object at 0x7f05cdb35750> │     │
│ │        __name__ = '__main__'                                                             │     │
│ │     __package__ = None                                                                   │     │
│ │        __spec__ = None                                                                   │     │
│ │            main = <function main at 0x7f05cc137130>                                      │     │
│ │              re = <module 're' from '/usr/lib/python3.10/re.py'>                         │     │
│ │             sys = <module 'sys' (built-in)>                                              │     │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────╯     │
│                                                                                                  │
│ /home/aroun/.local/lib/python3.10/site-packages/pacup/__main__.py:652 in main                    │
│                                                                                                  │
│   649 def main() -> None:                                                                        │
│   650"""The main function."""                                                               │
│   651traceback.install(show_locals=True)                                                    │
│ ❱ 652app()                                                                                  │
│   653                                                                                            │
│   654                                                                                            │
│   655 if __name__ == "__main__":                                                                 │
│                                                                                                  │
│ /usr/lib/python3/dist-packages/typer/main.py:214 in __call__                                     │
│                                                                                                  │
│   211 │   │   )                                                                                  │
│   212 │                                                                                          │
│   213def __call__(self, *args: Any, **kwargs: Any) -> Any:                                  │
│ ❱ 214 │   │   return get_command(self)(*args, **kwargs)                                          │
│   215                                                                                            │
│   216                                                                                            │
│   217 def get_group(typer_instance: Typer) -> click.Command:                                     │
│                                                                                                  │
│ ╭─────────────────────── locals ───────────────────────╮                                         │
│ │   args = ()                                          │                                         │
│ │ kwargs = {}                                          │                                         │
│ │   self = <typer.main.Typer object at 0x7f05cda27220> │                                         │
│ ╰──────────────────────────────────────────────────────╯                                         │
│                                                                                                  │
│ /usr/lib/python3/dist-packages/click/core.py:1128 in __call__                                    │
│                                                                                                  │
│   1125 │                                                                                         │
│   1126def __call__(self, *args: t.Any, **kwargs: t.Any) -> t.Any:                           │
│   1127 │   │   """Alias for :meth:`main`."""                                                     │
│ ❱ 1128 │   │   return self.main(*args, **kwargs)                                                 │
│   1129                                                                                           │
│   1130                                                                                           │
│   1131 class Command(BaseCommand):                                                               │
│                                                                                                  │
│ ╭──────────── locals ────────────╮                                                               │
│ │   args = ()                    │                                                               │
│ │ kwargs = {}                    │                                                               │
│ │   self = <TyperCommand update> │                                                               │
│ ╰────────────────────────────────╯                                                               │
│                                                                                                  │
│ /usr/lib/python3/dist-packages/click/core.py:1053 in main                                        │
│                                                                                                  │
│   1050 │   │   try:                                                                              │
│   1051 │   │   │   try:                                                                          │
│   1052 │   │   │   │   with self.make_context(prog_name, args, **extra) as ctx:                  │
│ ❱ 1053 │   │   │   │   │   rv = self.invoke(ctx)                                                 │
│   1054 │   │   │   │   │   if not standalone_mode:                                               │
│   1055 │   │   │   │   │   │   return rv                                                         │
│   1056 │   │   │   │   │   # it's not safe to `ctx.exit(rv)` here!                               │
│                                                                                                  │
│ ╭────────────────────────────── locals ───────────────────────────────╮                          │
│ │                args = []                                            │                          │
│ │        complete_var = None                                          │                          │
│ │                 ctx = <click.core.Context object at 0x7f05cc1497e0> │                          │
│ │               extra = {}                                            │                          │
│ │           prog_name = 'pacup'                                       │                          │
│ │                self = <TyperCommand update>                         │                          │
│ │     standalone_mode = True                                          │                          │
│ │ windows_expand_args = True                                          │                          │
│ ╰─────────────────────────────────────────────────────────────────────╯                          │
│                                                                                                  │
│ /usr/lib/python3/dist-packages/click/core.py:1395 in invoke                                      │
│                                                                                                  │
│   1392 │   │   │   echo(style(message, fg="red"), err=True)                                      │
│   1393 │   │                                                                                     │
│   1394 │   │   if self.callback is not None:                                                     │
│ ❱ 1395 │   │   │   return ctx.invoke(self.callback, **ctx.params)                                │
│   1396 │                                                                                         │
│   1397def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"]   │
│   1398 │   │   """Return a list of completions for the incomplete value. Looks                   │
│                                                                                                  │
│ ╭─────────────────────── locals ───────────────────────╮                                         │
│ │  ctx = <click.core.Context object at 0x7f05cc1497e0> │                                         │
│ │ self = <TyperCommand update>                         │                                         │
│ ╰──────────────────────────────────────────────────────╯                                         │
│                                                                                                  │
│ /usr/lib/python3/dist-packages/click/core.py:754 in invoke                                       │
│                                                                                                  │
│    751 │   │                                                                                     │
│    752 │   │   with augment_usage_errors(__self):                                                │
│    753 │   │   │   with ctx:                                                                     │
│ ❱  754 │   │   │   │   return __callback(*args, **kwargs)                                        │
│    755 │                                                                                         │
│    756 │   def forward(                                                                          │
│    757 │   │   __self, __cmd: "Command", *args: t.Any, **kwargs: t.Any  # noqa: B902             │
│                                                                                                  │
│ ╭────────────────────────────────────── locals ──────────────────────────────────────╮           │
│ │ _Context__callback = <function update at 0x7f05cc1552d0>                           │           │
│ │     _Context__self = <click.core.Context object at 0x7f05cc1497e0>                 │           │
│ │               args = ()                                                            │           │
│ │                ctx = <click.core.Context object at 0x7f05cc1497e0>                 │           │
│ │             kwargs = {                                                             │           │
│ │                      │   '_': None,                                                │           │
│ │                      │   'debug': True,                                            │           │
│ │                      │   'pacscripts': [                                           │           │
│ │                      │   │   PosixPath('bitwig-studio-deb.pacscript')              │           │
│ │                      │   ],                                                        │           │
│ │                      │   'show_repology': None                                     │           │
│ │                      }                                                             │           │
│ ╰────────────────────────────────────────────────────────────────────────────────────╯           │
│                                                                                                  │
│ /usr/lib/python3/dist-packages/typer/main.py:500 in wrapper                                      │
│                                                                                                  │
│   497 │   │   │   │   use_params[k] = v                                                          │
│   498 │   │   if context_param_name:                                                             │
│   499 │   │   │   use_params[context_param_name] = click.get_current_context()                   │
│ ❱ 500 │   │   return callback(**use_params)  # type: ignore                                      │
│   501 │                                                                                          │
│   502 │   update_wrapper(wrapper, callback)                                                      │
│   503 │   return wrapper                                                                         │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │           callback = <function update at 0x7f05cc1371c0>                                     │ │
│ │ context_param_name = None                                                                    │ │
│ │         convertors = {                                                                       │ │
│ │                      │   'pacscripts': <function                                             │ │
│ │                      generate_iter_convertor.<locals>.internal_convertor at 0x7f05cc155120>  │ │
│ │                      }                                                                       │ │
│ │                  k = 'show_repology'                                                         │ │
│ │             kwargs = {                                                                       │ │
│ │                      │   '_': None,                                                          │ │
│ │                      │   'debug': True,                                                      │ │
│ │                      │   'pacscripts': [PosixPath('bitwig-studio-deb.pacscript')],           │ │
│ │                      │   'show_repology': None                                               │ │
│ │                      }                                                                       │ │
│ │         use_params = {                                                                       │ │
│ │                      │   'show_repology': None,                                              │ │
│ │                      │   'debug': True,                                                      │ │
│ │                      │   '_': None,                                                          │ │
│ │                      │   'pacscripts': [PosixPath('bitwig-studio-deb.pacscript')]            │ │
│ │                      }                                                                       │ │
│ │                  v = None                                                                    │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /home/aroun/.local/lib/python3.10/site-packages/pacup/__main__.py:479 in update                  │
│                                                                                                  │
│   476 │   │   │   │   "Downloading package", start=False                                         │
│   477 │   │   │   )                                                                              │
│   478 │   │   │   try:                                                                           │
│ ❱ 479 │   │   │   │   latest_hash = loop.run_until_complete(                                     │
│   480 │   │   │   │   │   download(                                                              │
│   481 │   │   │   │   │   │   url.value.replace(version.current, version.latest),                │
│   482 │   │   │   │   │   │   downloading_package_progress,                                      │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │                               _ = None                                                       │ │
│ │                           debug = True                                                       │ │
│ │    downloading_package_progress = <rich.progress.Progress object at 0x7f05cc14aaa0>          │ │
│ │     failed_to_update_pacscripts = {}                                                         │ │
│ │                       hash_line = 6                                                          │ │
│ │                           lines = [                                                          │ │
│ │                                   │   'name="bitwig-studio-deb"\n',                          │ │
│ │                                   │   'repology=("project: bitwig-studio")\n',               │ │
│ │                                   │   'gives="bitwig-studio"\n',                             │ │
│ │                                   │   'version="4.2"\n',                                     │ │
│ │                                   │                                                          │ │
│ │                                   'url="https://downloads.bitwig.com/${version}/${gives}-${… │ │
│ │                                   │   'description="Digital audio workstation for music      │ │
│ │                                   production, remixing and live p'+12,                       │ │
│ │                                   │                                                          │ │
│ │                                   'hash="848204563e6c33f35d8418b07ab16fc885ea8f447c12f731c0… │ │
│ │                                   │   'maintainer="Zahrun <[email protected]>"\n'            │ │
│ │                                   ]                                                          │ │
│ │                             log = <Logger rich (DEBUG)>                                      │ │
│ │                            loop = <_UnixSelectorEventLoop running=False closed=False         │ │
│ │                                   debug=False>                                               │ │
│ │                newer_pacscripts = []                                                         │ │
│ │              outdated_pacscript = Pacscript(name=bitwig-studio-deb.pacscript,                │ │
│ │                                   pkgname=bitwig-studio, version=Version(line_number=3,      │ │
│ │                                   current=4.2, latest=4.2.3,                                 │ │
│ │                                   status=VersionStatuses.OUTDATED), url=Url(line_number=4,   │ │
│ │                                   value=https://downloads.bitwig.com/4.2/bitwig-studio-4.2.… │ │
│ │                                   hash_line=6, maintainer='Zahrun <[email protected]>'       │ │
│ │                                   repology_filters={'status': 'newest'})                     │ │
│ │             outdated_pacscripts = [                                                          │ │
│ │                                   │   Pacscript(name=bitwig-studio-deb.pacscript,            │ │
│ │                                   pkgname=bitwig-studio, version=Version(line_number=3,      │ │
│ │                                   current=4.2, latest=4.2.3,                                 │ │
│ │                                   status=VersionStatuses.OUTDATED), url=Url(line_number=4,   │ │
│ │                                   value=https://downloads.bitwig.com/4.2/bitwig-studio-4.2.… │ │
│ │                                   hash_line=6, maintainer='Zahrun <[email protected]>'       │ │
│ │                                   repology_filters={'status': 'newest'})                     │ │
│ │                                   ]                                                          │ │
│ │       outdated_pacscripts_table = <rich.table.Table object at 0x7f05cc149de0>                │ │
│ │                       pacscript = Pacscript(name=bitwig-studio-deb.pacscript,                │ │
│ │                                   pkgname=bitwig-studio, version=Version(line_number=3,      │ │
│ │                                   current=4.2, latest=4.2.3,                                 │ │
│ │                                   status=VersionStatuses.OUTDATED), url=Url(line_number=4,   │ │
│ │                                   value=https://downloads.bitwig.com/4.2/bitwig-studio-4.2.… │ │
│ │                                   hash_line=6, maintainer='Zahrun <[email protected]>'       │ │
│ │                                   repology_filters={'status': 'newest'})                     │ │
│ │                      pacscripts = [PosixPath('bitwig-studio-deb.pacscript')]                 │ │
│ │               parsed_pacscripts = [                                                          │ │
│ │                                   │   Pacscript(name=bitwig-studio-deb.pacscript,            │ │
│ │                                   pkgname=bitwig-studio, version=Version(line_number=3,      │ │
│ │                                   current=4.2, latest=4.2.3,                                 │ │
│ │                                   status=VersionStatuses.OUTDATED), url=Url(line_number=4,   │ │
│ │                                   value=https://downloads.bitwig.com/4.2/bitwig-studio-4.2.… │ │
│ │                                   hash_line=6, maintainer='Zahrun <[email protected]>'       │ │
│ │                                   repology_filters={'status': 'newest'})                     │ │
│ │                                   ]                                                          │ │
│ │     parsing_pacscripts_progress = <rich.progress.Progress object at 0x7f05cc149d80>          │ │
│ │                            path = PosixPath('bitwig-studio-deb.pacscript')                   │ │
│ │                         pkgname = 'bitwig-studio'                                            │ │
│ │                   release_notes = {}                                                         │ │
│ │                   show_repology = None                                                       │ │
│ │ successfully_updated_pacscripts = []                                                         │ │
│ │                            task = 0                                                          │ │
│ │              unknown_pacscripts = []                                                         │ │
│ │              updated_pacscripts = []                                                         │ │
│ │                             url = Url(line_number=4,                                         │ │
│ │                                   value=https://downloads.bitwig.com/4.2/bitwig-studio-4.2.… │ │
│ │                         version = Version(line_number=3, current=4.2, latest=4.2.3,          │ │
│ │                                   status=VersionStatuses.OUTDATED)                           │ │
│ │          version_statuses_table = <rich.table.Table object at 0x7f05cc14a740>                │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /usr/lib/python3.10/asyncio/base_events.py:646 in run_until_complete                             │
│                                                                                                  │
│    643 │   │   if not future.done():                                                             │
│    644 │   │   │   raise RuntimeError('Event loop stopped before Future completed.')             │
│    645 │   │                                                                                     │
│ ❱  646 │   │   return future.result()                                                            │
│    647 │                                                                                         │
│    648 │   def stop(self):                                                                       │
│    649 │   │   """Stop running the event loop.                                                   │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │   future = <Task finished name='Task-6' coro=<download() done, defined at                    │ │
│ │            /home/aroun/.local/lib/python3.10/site-packages/pacup/__main__.py:72>             │ │
│ │            exception=KeyError('Content-Length')>                                             │ │
│ │ new_task = True                                                                              │ │
│ │     self = <_UnixSelectorEventLoop running=False closed=False debug=False>                   │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                  │
│ /home/aroun/.local/lib/python3.10/site-packages/pacup/__main__.py:96 in download                 │
│                                                                                                  │
│    93async with AsyncClient(follow_redirects=True).stream("GET", url) as response:          │
│    94 │   │   response.raise_for_status()                                                        │
│    95 │   │   makedirs("/tmp/pacup", exist_ok=True)                                              │
│ ❱  96 │   │   progress.update(task, total=int(response.headers["Content-Length"]))               │
│    97 │   │                                                                                      │
│    98 │   │   with open("/tmp/pacup/" + url.split("/")[-1], "wb") as file:                       │
│    99 │   │   │   progress.start_task(task)                                                      │
│                                                                                                  │
│ ╭─────────────────────────────────── locals ───────────────────────────────────╮                 │
│ │ download_hash = <sha256 _hashlib.HASH object @ 0x7f05cb054370>               │                 │
│ │      progress = <rich.progress.Progress object at 0x7f05cc14aaa0>            │                 │
│ │      response = <Response [200 OK]>                                          │                 │
│ │          task = 0                                                            │                 │
│ │           url = 'https://downloads.bitwig.com/4.2.3/bitwig-studio-4.2.3.deb' │                 │
│ ╰──────────────────────────────────────────────────────────────────────────────╯                 │
│                                                                                                  │
│ /usr/lib/python3/dist-packages/httpx/_models.py:993 in __getitem__                               │
│                                                                                                  │
│    990 │   │   if items:                                                                         │
│    991 │   │   │   return ", ".join(items)                                                       │
│    992 │   │                                                                                     │
│ ❱  993 │   │   raise KeyError(key)                                                               │
│    994 │                                                                                         │
│    995def __setitem__(self, key: str, value: str) -> None:                                  │
│    996 │   │   """                                                                               │
│                                                                                                  │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │          items = []                                                                          │ │
│ │            key = 'Content-Length'                                                            │ │
│ │ normalized_key = b'content-length'                                                           │ │
│ │           self = Headers([('accept-ranges', 'bytes'), ('etag',                               │ │
│ │                  '"88ab8a45681e1d86e8347d6faf8d121e:1649410299.413639"'), ('last-modified',  │ │
│ │                  'Fri, 08 Apr 2022 09:33:07 GMT'), ('server', 'AkamaiNetStorage'), ('vary',  │ │
│ │                  'Accept-Encoding'), ('content-encoding', 'gzip'), ('date', 'Thu, 28 Apr     │ │
│ │                  2022 16:19:58 GMT'), ('transfer-encoding', 'chunked'), ('connection',       │ │
│ │                  'keep-alive'), ('connection', 'Transfer-Encoding'), ('content-type',        │ │
│ │                  'application/octet-stream')])                                               │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
KeyError: 'Content-Length'

[Feature]: Forcing a custom version when shipping

Is your feature related to a problem? Please describe.

Sometimes repology does not have the latest version yet or is simply incorrect. This is especially annoying for packages that simply refuse to start up until they are updated.

A clear and concise description of what you want to happen.

If #18 gets implemented, that should already help fix the problem. However it would still be nice to be able to manually specify a version. I was thinking of the following syntax:

Describe alternatives you've considered

Manually updating the pacscript :(
or writing a script for it, but this feels like a feature that belongs in pacup.

Additional context

No response

[Feature]: catch all same distro versions

Is your feature related to a problem? Please describe.

Currently, if we specify a repo that points to a distribution repo of which the distribution is not rolling, we will not get informed if the same distribution releases a new version of the package in a new release of the distribution.
Example: https://github.com/pacstall/pacstall-programs/blob/master/packages/warpinator-deb/warpinator-deb.pacscript has "repo: linux_mint_21_1". It would be nice if we could catch a new release in linux_mint_21_2 without changing the repology variable.

A clear and concise description of what you want to happen.

A wildcard like "repo: linux_mint*" would be nice

Describe alternatives you've considered

I thought that if we filter on maintainer instead of repo, that would also be interesting, in this case "maitainers: [email protected]" would also give all versions that come from linuxmint repo, but it seems pacup does not support filtering based on maitainer so far

Additional context

No response

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.