Merge pull request #191369 from romildo/new.httpUpdater

directoryListingUpdater: init; enlightenment.enlightenment: add update script
This commit is contained in:
José Romildo Malaquias 2022-10-03 22:03:36 -03:00 committed by GitHub
commit 78537abc21
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 124 additions and 10 deletions

View file

@ -0,0 +1,19 @@
{ lib
, genericUpdater
, common-updater-scripts
}:
{ pname ? null
, version ? null
, attrPath ? null
, ignoredVersions ? ""
, rev-prefix ? ""
, odd-unstable ? false
, patchlevel-unstable ? false
, url ? null
}:
genericUpdater {
inherit pname version attrPath ignoredVersions rev-prefix odd-unstable patchlevel-unstable;
versionLister = "${common-updater-scripts}/bin/list-directory-versions ${lib.optionalString (url != null) "--url=${lib.escapeShellArg url}"}";
}

View file

@ -62,7 +62,7 @@ let
return 1
}
tags=$($version_lister --pname=$pname --attr-path=$attr_path --file="${fileForGitCommands}") || exit 1
tags=$(sh -c "$version_lister --pname=$pname --attr-path=$attr_path --file=\"${fileForGitCommands}\"") || exit 1
# print available tags
for tag in $tags; do

View file

@ -15,5 +15,5 @@
genericUpdater {
inherit pname version attrPath ignoredVersions rev-prefix odd-unstable patchlevel-unstable;
versionLister = "${common-updater-scripts}/bin/list-archive-two-levels-versions ${lib.optionalString (url != null) "--url=${url}"}";
versionLister = "${common-updater-scripts}/bin/list-archive-two-levels-versions ${lib.optionalString (url != null) "--url=${lib.escapeShellArg url}"}";
}

View file

@ -1,9 +1,28 @@
{ lib, stdenv, makeWrapper, coreutils, gnused, gnugrep, diffutils, nix, git, jq }:
{ lib
, stdenv
, makeWrapper
, coreutils
, diffutils
, git
, gnugrep
, gnused
, jq
, nix
, python3Packages
}:
stdenv.mkDerivation {
name = "common-updater-scripts";
nativeBuildInputs = [ makeWrapper ];
nativeBuildInputs = [
makeWrapper
python3Packages.wrapPython
];
pythonPath = [
python3Packages.beautifulsoup4
python3Packages.requests
];
dontUnpack = true;
@ -11,8 +30,15 @@ stdenv.mkDerivation {
mkdir -p $out/bin
cp ${./scripts}/* $out/bin
# wrap non python scripts
for f in $out/bin/*; do
wrapProgram $f --prefix PATH : ${lib.makeBinPath [ coreutils gnused gnugrep nix diffutils git jq ]}
if ! (head -n1 "$f" | grep -q '#!.*/env.*\(python\|pypy\)'); then
wrapProgram $f --prefix PATH : ${lib.makeBinPath [ coreutils diffutils git gnugrep gnused jq nix ]}
fi
done
# wrap python scripts
makeWrapperArgs+=( --prefix PATH : "${lib.makeBinPath [ nix ]}" )
wrapPythonPrograms
'';
}

View file

@ -4,7 +4,7 @@
pname="" # package name
attr_path="" # package attribute path
url="" # directory list url
url="" # directory listing url
file="" # file for writing debugging information
while (( $# > 0 )); do
@ -31,7 +31,7 @@ while (( $# > 0 )); do
done
if [[ -z "$pname" ]]; then
pname="$UPDATE_NIX_NAME"
pname="$UPDATE_NIX_PNAME"
fi
if [[ -z "$attr_path" ]]; then

View file

@ -0,0 +1,65 @@
#!/usr/bin/env python
import argparse
import requests
import os
import subprocess
import json
import re
from bs4 import BeautifulSoup
parser = argparse.ArgumentParser(
description="Get all available versions listed for a package in a site."
)
parser.add_argument(
"--pname",
default=os.environ.get("UPDATE_NIX_PNAME"),
required="UPDATE_NIX_PNAME" not in os.environ,
help="name of the package",
)
parser.add_argument(
"--attr-path",
default=os.environ.get("UPDATE_NIX_ATTR_PATH"),
help="attribute path of the package",
)
parser.add_argument("--url", help="url of the page that lists the package versions")
parser.add_argument("--file", help="file name for writing debugging information")
if __name__ == "__main__":
args = parser.parse_args()
pname = args.pname
attr_path = args.attr_path or pname
url = args.url or json.loads(
subprocess.check_output(
[
"nix-instantiate",
"--json",
"--eval",
"-E",
f"with import ./. {{}}; dirOf (lib.head {attr_path}.src.urls)",
],
text=True,
)
)
# print a debugging message
if args.file:
with open(args.file, "a") as f:
f.write(f"# Listing versions for {pname} from {url}\n")
page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")
links = soup.find_all("a")
for link in links:
link_url = link.get("href", None)
if link_url is not None:
match = re.fullmatch(
rf"{args.pname}-([\d.]+?(-[\d\w.-]+?)?)(\.tar)?(\.[^.]*)", link_url
)
if match:
print(match.group(1))

View file

@ -31,7 +31,7 @@ while (( $# > 0 )); do
done
if [[ -z "$pname" ]]; then
pname="$UPDATE_NIX_NAME"
pname="$UPDATE_NIX_PNAME"
fi
if [[ -z "$attr_path" ]]; then

View file

@ -14,10 +14,10 @@
, pam
, xkeyboard_config
, udisks2
, waylandSupport ? false, wayland-protocols, xwayland
, bluetoothSupport ? true, bluez5
, pulseSupport ? !stdenv.isDarwin, libpulseaudio
, directoryListingUpdater
}:
stdenv.mkDerivation rec {
@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
version = "0.25.4";
src = fetchurl {
url = "http://download.enlightenment.org/rel/apps/${pname}/${pname}-${version}.tar.xz";
url = "https://download.enlightenment.org/rel/apps/${pname}/${pname}-${version}.tar.xz";
sha256 = "sha256-VttdIGuCG5qIMdJucT5BCscLIlWm9D/N98Ae794jt6I=";
};
@ -71,6 +71,8 @@ stdenv.mkDerivation rec {
passthru.providedSessions = [ "enlightenment" ];
passthru.updateScript = directoryListingUpdater { };
meta = with lib; {
description = "The Compositing Window Manager and Desktop Shell";
homepage = "https://www.enlightenment.org";

View file

@ -126,6 +126,8 @@ with pkgs;
_experimental-update-script-combinators = callPackage ../common-updater/combinators.nix { };
directoryListingUpdater = callPackage ../common-updater/directory-listing-updater.nix { };
gitUpdater = callPackage ../common-updater/git-updater.nix { };
httpTwoLevelsUpdater = callPackage ../common-updater/http-two-levels-updater.nix { };