forked from artix/artools
		
	Compare commits
	
		
			39 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 8873a71824 | |||
| bb86a05f2f | |||
| bd611c1af2 | |||
| f4e8f703ea | |||
| aa83bc79bb | |||
| 1bb9687ece | |||
| 48ced03735 | |||
| 0437e66091 | |||
| 9af6d02dea | |||
| 685992cca3 | |||
| 816e13895f | |||
| 6a3f48f181 | |||
| b4d9195c03 | |||
| 0123e6d044 | |||
| e2b2a21ed1 | |||
| 0e2e2875db | |||
| a4d006adef | |||
| 98926fbdd0 | |||
| a1a2289e18 | |||
| 057cbf1691 | |||
| 0b05cbeba1 | |||
| ed5dad3066 | |||
| 76cce316a2 | |||
| 7c152b4f60 | |||
| 79c831c616 | |||
| 6b27c82b86 | |||
| 2cc5047dda | |||
| 08ab8c2137 | |||
| 9ddd962c2c | |||
| a8c07bd7f3 | |||
| 1fcf78bb47 | |||
| 167265944d | |||
| 7ef931026e | |||
| bef2a0b3fa | |||
| 8d6f12f5a9 | |||
| bf6fc3fcff | |||
| 11c73f1086 | |||
| 62e4795000 | |||
| 2f92ba003b | 
							
								
								
									
										13
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| VERSION=0.12 | ||||
| VERSION=0.14 | ||||
|  | ||||
| CHROOT_VERSION=0.9 | ||||
|  | ||||
| @@ -34,13 +34,11 @@ PKG_BIN = \ | ||||
| 	bin/pkg/deploypkg \ | ||||
| 	bin/pkg/commitpkg \ | ||||
| 	bin/pkg/comparepkg \ | ||||
| 	bin/pkg/checkpkg \ | ||||
| 	bin/pkg/mkchrootpkg \ | ||||
| 	bin/pkg/pkg2yaml \ | ||||
| 	bin/pkg/buildtree \ | ||||
| 	bin/pkg/lddd \ | ||||
| 	bin/pkg/finddeps \ | ||||
| 	bin/pkg/find-libdeps | ||||
| 	bin/pkg/links-add | ||||
|  | ||||
| LN_COMMITPKG = \ | ||||
| 	extrapkg \ | ||||
| @@ -87,9 +85,6 @@ LN_DEPLOYPKG = \ | ||||
| PKG_LIBS = \ | ||||
| 	$(wildcard lib/pkg/*) | ||||
|  | ||||
| PKG_LISTS = \ | ||||
| 	$(wildcard data/pkglists/*.list) | ||||
|  | ||||
| PKG_UTIL = lib/util-pkg.sh | ||||
|  | ||||
| PKG_DATA = \ | ||||
| @@ -169,7 +164,7 @@ install_pkg: | ||||
| 	install $(DIRMODE) $(DESTDIR)$(BINDIR) | ||||
| 	install $(MODE) $(PKG_BIN) $(DESTDIR)$(BINDIR) | ||||
|  | ||||
| 	$(LN) find-libdeps $(DESTDIR)$(BINDIR)/find-libprovides | ||||
| 	$(LN) links-add $(DESTDIR)$(BINDIR)/links-remove | ||||
|  | ||||
| 	for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(LN_BUILDPKG); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| @@ -185,8 +180,6 @@ install_pkg: | ||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | ||||
| 	install $(FILEMODE) $(PATCHES) $(DESTDIR)$(DATADIR)/$(TOOLS)/patches | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists | ||||
| 	install $(FILEMODE) $(PKG_LISTS) $(DESTDIR)$(DATADIR)/$(TOOLS)/pkglists | ||||
| install_cpio: | ||||
| 	+make CPIODIR=$(CPIODIR) DESTDIR=$(DESTDIR) -C initcpio install | ||||
|  | ||||
|   | ||||
| @@ -71,9 +71,14 @@ else | ||||
|     cache_dirs=("$cache_dir") | ||||
| fi | ||||
|  | ||||
| pacconf_cmd=$(command -v pacman-conf || command -v pacconf) | ||||
| host_mirrors=($($pacconf_cmd --repo world Server 2> /dev/null | sed -r 's#(.*/)world/os/.*#\1$repo/os/$arch#')) | ||||
|      | ||||
| copy_hostconf () { | ||||
|     cp -a /etc/pacman.d/gnupg "$1/etc/pacman.d" | ||||
|  | ||||
|      | ||||
|     printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist" | ||||
|      | ||||
|     [[ -n $pacman_conf ]] && cp $pacman_conf "$1/etc/pacman.conf" | ||||
|  | ||||
|     [[ -n $makepkg_conf ]] && cp $makepkg_conf "$1/etc/makepkg.conf" | ||||
| @@ -104,6 +109,13 @@ chroot_extra_mount() { | ||||
|     for m in ${bindmounts_rw[@]}; do | ||||
|         chroot_mount "${m%%:*}" "$1${m##*:}" -B | ||||
|     done | ||||
|      | ||||
|     for host_mirror in "${host_mirrors[@]}"; do | ||||
|         if [[ $host_mirror == *file://* ]]; then | ||||
|             host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g') | ||||
|             chroot_mount "$host_mirror_path" "$1$host_mirror_path" -Br | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| umask 0022 | ||||
|   | ||||
| @@ -157,12 +157,12 @@ done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| ${pretend} && display_settings && exit 1 | ||||
|  | ||||
| check_root | ||||
|  | ||||
| prepare_traps | ||||
|  | ||||
| prepare_build | ||||
|  | ||||
| ${pretend} && display_settings && exit 1 | ||||
|  | ||||
| build | ||||
|   | ||||
| @@ -78,7 +78,7 @@ from_arch(){ | ||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" | ||||
|  | ||||
|     local package=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||
|     local repo=$(find_repo "$package") | ||||
|     local repo=$(find_repo "$package" "${staging}" "${unstable}") | ||||
|  | ||||
|     src=$package/repos/$repo | ||||
|  | ||||
| @@ -114,7 +114,7 @@ view_build(){ | ||||
|     [[ -z $git_tree_arch ]] && die "Package '%s' does not exist!" "$pkg" | ||||
|  | ||||
|     local pkg_path=${TREE_DIR_ARCH}/$git_tree_arch/$pkg | ||||
|     local repo=$(find_repo "$pkg_path") | ||||
|     local repo=$(find_repo "$pkg_path" "${staging}" "${unstable}") | ||||
|  | ||||
|     src=$pkg_path/repos/$repo | ||||
|  | ||||
| @@ -139,6 +139,8 @@ import=false | ||||
| view=false | ||||
| createnew=false | ||||
| conf=false | ||||
| unstable=false | ||||
| staging=true | ||||
|  | ||||
| PACKAGE='' | ||||
|  | ||||
| @@ -157,6 +159,8 @@ usage() { | ||||
|     echo "    -y            Don't clone or pull artix repos" | ||||
|     echo '    -i            Import a package from arch repos' | ||||
|     echo '    -n            Make new remote subrepo and clone it' | ||||
|     echo '    -u            Include kde & gnome unstable (only with -i)' | ||||
|     echo '    -w            Exclude staging (only with -i)' | ||||
|     echo '    -v            View package depends' | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
| @@ -166,7 +170,7 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='p:t:g:sinzyvh' | ||||
| opts='p:t:g:uwsinzyvh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
| @@ -178,6 +182,8 @@ while getopts "${opts}" arg; do | ||||
|         y) sync_artix=false ;; | ||||
|         i) import=true ;; | ||||
|         n) createnew=true ;; | ||||
|         w) staging=false ;; | ||||
|         u) unstable=true ;; | ||||
|         v) view=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|   | ||||
| @@ -1,80 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # Copyright (C) 2018-19 artoo@artixlinux.org | ||||
| # Copyright (C) 2018 Artix Linux Developers | ||||
| # | ||||
| # This program 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; version 2 of the License. | ||||
| # | ||||
| # This program 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. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| shopt -s extglob | ||||
|  | ||||
| load_user_info | ||||
|  | ||||
| load_vars "${USERCONFDIR}/pacman/makepkg.conf" || load_vars "$USER_HOME/.makepkg.conf" | ||||
| load_vars /etc/makepkg.conf | ||||
|  | ||||
| if [[ ! -f PKGBUILD ]]; then | ||||
|     die 'This must be run in the directory of a built package.' | ||||
| fi | ||||
|  | ||||
| . ./PKGBUILD | ||||
| if [[ $arch == 'any' ]]; then | ||||
|     CARCH='any' | ||||
| fi | ||||
|  | ||||
| STARTDIR=$(pwd) | ||||
| TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX) | ||||
|  | ||||
| for _pkgname in "${pkgname[@]}"; do | ||||
|     target_pkgver=$(get_full_version "$_pkgname") | ||||
|     if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then | ||||
|         die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver" | ||||
|     fi | ||||
|  | ||||
|     ln -s "$pkgfile" "$TEMPDIR" | ||||
|  | ||||
|     pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$_pkgname") | ||||
|  | ||||
|     if [[ $? -ne 0 ]]; then | ||||
|         die "Couldn't download previous package for %s." "$_pkgname" | ||||
|     fi | ||||
|  | ||||
|     oldpkg=${pkgurl##*://*/} | ||||
|  | ||||
|     if [[ ${oldpkg##*/} = ${pkgfile##*/} ]]; then | ||||
|         die "The built package (%s) is the one in the repo right now!" "$_pkgname" | ||||
|     fi | ||||
|  | ||||
|     if [[ $pkgurl = file://* ]]; then | ||||
|         ln -s "${pkgurl#file://}" "$TEMPDIR/$oldpkg" | ||||
|     elif [[ -f "$PKGDEST/$oldpkg" ]]; then | ||||
|         ln -s "$PKGDEST/$oldpkg" "$TEMPDIR/$oldpkg" | ||||
|     elif [[ -f "$STARTDIR/$oldpkg" ]]; then | ||||
|         ln -s "$STARTDIR/$oldpkg" "$TEMPDIR/$oldpkg" | ||||
|     else | ||||
|         curl -fsLC - --retry 3 --retry-delay 3 -o "$TEMPDIR/$oldpkg" "$pkgurl" | ||||
|     fi | ||||
|  | ||||
|     bsdtar tf "$TEMPDIR/$oldpkg" | sort > "$TEMPDIR/filelist-$_pkgname-old" | ||||
|     bsdtar tf "$pkgfile" | sort > "$TEMPDIR/filelist-$_pkgname" | ||||
|  | ||||
|     sdiff -s "$TEMPDIR/filelist-$_pkgname-old" "$TEMPDIR/filelist-$_pkgname" | ||||
|  | ||||
|     find-libprovides "$TEMPDIR/$oldpkg" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname-old" | ||||
|     find-libprovides "$pkgfile" 2>/dev/null | sort > "$TEMPDIR/libraries-$_pkgname" | ||||
|     if ! diff_output="$(sdiff -s "$TEMPDIR/libraries-$_pkgname-old" "$TEMPDIR/libraries-$_pkgname")"; then | ||||
|         msg "Sonames differ in %s!" "$_pkgname" | ||||
|         echo "$diff_output" | ||||
|     else | ||||
|         msg "No soname differences for %s" "$_pkgname." | ||||
|     fi | ||||
| done | ||||
| @@ -15,6 +15,22 @@ | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| get_path(){ | ||||
|     local repo="$1" pkg=trunk/PKGBUILD | ||||
|     if [[ $repo != trunk ]]; then | ||||
|         [[ -f repos/$repo-${ARCH}/PKGBUILD ]] && pkg=repos/$repo-${ARCH}/PKGBUILD | ||||
|         [[ -f repos/$repo-any/PKGBUILD ]] && pkg=repos/$repo-any/PKGBUILD | ||||
|     fi | ||||
|     echo $pkg | ||||
| } | ||||
|  | ||||
| prepare_commit(){ | ||||
|     local dest="$1" | ||||
|     [[ -d repos/$dest ]] && git rm -r repos/$dest | ||||
|     [[ ! -d repos ]] && mkdir repos | ||||
|     [[ ! -d repos/$dest ]] && mkdir repos/$dest | ||||
| } | ||||
|  | ||||
| commit_pkg(){ | ||||
|     local git_tree=$(find_tree "${TREE_DIR_ARTIX}" "${PACKAGE}") | ||||
|     if [[ -n ${git_tree} ]];then | ||||
| @@ -25,9 +41,13 @@ commit_pkg(){ | ||||
|  | ||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||
|  | ||||
|         . trunk/PKGBUILD | ||||
|         local pkgbuild=$(get_path "${REPO_SRC}") | ||||
|  | ||||
|         . $pkgbuild | ||||
|         [[ $arch == 'any' ]] && CARCH=any | ||||
|         local ver=$(get_full_version "${PACKAGE}") | ||||
|  | ||||
|         local version=$(get_full_version) | ||||
|  | ||||
|         local commit_msg="" | ||||
|  | ||||
|         if ${remove};then | ||||
| @@ -36,14 +56,14 @@ commit_pkg(){ | ||||
|                 local pkg=${PACKAGE} | ||||
|                 git rm -r trunk | ||||
|             else | ||||
|                 local pkg="${PACKAGE}-$ver" | ||||
|                 local pkg="${PACKAGE}-$version" | ||||
|                 git rm -r repos/"${REPO_SRC}-$CARCH" | ||||
|             fi | ||||
|             commit_msg="[${REPO_SRC}] '$pkg' ${action}" | ||||
|             msg "Action: %s" "$commit_msg" | ||||
|         else | ||||
|             local action='modify' | ||||
|             commit_msg="[${REPO_SRC}] '${PACKAGE}-$ver' ${action}" | ||||
|             commit_msg="[${REPO_SRC}] '${PACKAGE}-$version' ${action}" | ||||
|             msg "Action: %s" "$commit_msg" | ||||
|             git add . | ||||
|  | ||||
| @@ -76,17 +96,18 @@ symlink_commit_pkg(){ | ||||
|  | ||||
|         cd ${TREE_DIR_ARTIX}/${git_tree}/${PACKAGE} | ||||
|  | ||||
|         . trunk/PKGBUILD | ||||
|         local pkgbuild=$(get_path "${REPO_SRC}") | ||||
|  | ||||
|         . $pkgbuild | ||||
|         [[ $arch == 'any' ]] && CARCH=any | ||||
|         local ver=$(get_full_version "${PACKAGE}") | ||||
|  | ||||
|         local version=$(get_full_version) | ||||
|  | ||||
|         if [[ ${REPO_SRC} == 'trunk' ]];then | ||||
|             local action='add' | ||||
|             local dest="${REPO_DEST}-$CARCH" | ||||
|  | ||||
|             [[ -d repos/$dest ]] && git rm -r repos/$dest | ||||
|             [[ ! -d repos ]] && mkdir repos | ||||
|             [[ ! -d repos/$dest ]] && mkdir repos/$dest | ||||
|             prepare_commit "$dest" | ||||
|  | ||||
|             cp trunk/* repos/$dest/ | ||||
|         else | ||||
| @@ -94,14 +115,12 @@ symlink_commit_pkg(){ | ||||
|             local src="${REPO_SRC}-$CARCH" dest="${REPO_DEST}-$CARCH" | ||||
|  | ||||
|             [[ ! -f repos/$src/PKGBUILD ]] && die "%s does not exist!" "repos/$src/PKGBUILD" | ||||
|             [[ -d repos/$dest ]] && git rm -r repos/$dest | ||||
|             [[ ! -d repos ]] && mkdir repos | ||||
|             [[ ! -d repos/$dest ]] && mkdir repos/$dest | ||||
|             prepare_commit "$dest" | ||||
|  | ||||
|             cp repos/$src/* repos/$dest/ | ||||
|             git rm -r repos/$src | ||||
|         fi | ||||
|         local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$ver' ${action}" | ||||
|         local commit_msg="[${REPO_SRC}] -> [${REPO_DEST}] '${PACKAGE}-$version' ${action}" | ||||
|         msg "Action: %s" "$commit_msg" | ||||
|  | ||||
|         git add . | ||||
|   | ||||
| @@ -15,73 +15,162 @@ | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| compare(){ | ||||
|     local pkgpath="$1" | ||||
|     local pkg=${pkgpath##*/} | ||||
|     local artixrepo=$(find_repo "$package" "${staging}" "${unstable}") | ||||
|     local artixshow=${artixrepo%-*} | ||||
|     local pkgbuild=$pkgpath/repos/$artixrepo/PKGBUILD | ||||
|  | ||||
|     if [[ -f $pkgbuild ]];then | ||||
|  | ||||
|         . $pkgbuild 2>/dev/null | ||||
|         local artixver=$(get_full_version $pkg) | ||||
|  | ||||
|         local archpath=$(get_import_path $pkg) | ||||
|  | ||||
|         local archrepo=$(find_repo "$archpath" "${staging}" "${unstable}") | ||||
|  | ||||
|         local archshow=${archrepo%-*} | ||||
|         pkgbuild=$archpath/repos/$archrepo/PKGBUILD | ||||
|  | ||||
|         if [[ -f $pkgbuild ]];then | ||||
|             . $pkgbuild 2>/dev/null | ||||
|             local archver=$(get_full_version $pkg) | ||||
|         fi | ||||
|  | ||||
|         local result=$(vercmp "$artixver" "$archver") | ||||
|  | ||||
|         local repomatch=false | ||||
|         [[ "$archrepo" == "$artixrepo" ]] && repomatch=true | ||||
|  | ||||
|         if ${move};then | ||||
|  | ||||
|             if [ $result -gt -1 ];then | ||||
|                 case $artixrepo in | ||||
|                     *testing*|*staging*) | ||||
|                         if $repomatch;then | ||||
|                             msg_row "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                         else | ||||
|                             msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                         fi | ||||
|                     ;; | ||||
|                 esac | ||||
|             fi | ||||
|  | ||||
|         elif ${upgrades};then | ||||
|  | ||||
|             if [ $result -eq -1 ];then | ||||
|                 msg_row_upgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|             fi | ||||
|  | ||||
|         elif ${downgrades};then | ||||
|  | ||||
|             if [ $result -eq 1 ];then | ||||
|                 if [[ -n $archver ]] && [[ -n $archrepo ]];then | ||||
|                     msg_row_downgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                 fi | ||||
|             fi | ||||
|  | ||||
|         fi | ||||
|         unset pkgver epoch pkgrel artixver archver pkgbuild archpath | ||||
|  | ||||
|     fi | ||||
| } | ||||
|  | ||||
| is_db_entry() { | ||||
|     local pkgname="$1" repo="$(arch2artix $2)" | ||||
|     if [[ -d ${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/$repo/$pkgname ]];then | ||||
|         return 0 | ||||
|     fi | ||||
|     return 1 | ||||
| } | ||||
|  | ||||
| check_db(){ | ||||
|     local pkgpath="$1" | ||||
|     local pkg=${pkgpath##*/} | ||||
|     local sarch=(any ${ARCH}) | ||||
|     local arch_repos=$(arch_repos "${staging}" "${unstable}") | ||||
|  | ||||
|     for repo in ${arch_repos[@]};do | ||||
|  | ||||
|         for a in ${sarch[@]};do | ||||
|  | ||||
|             local pkgbuild=$pkgpath/repos/$repo-$a/PKGBUILD | ||||
|  | ||||
|             if [[ -f $pkgbuild ]];then | ||||
|  | ||||
|                 . $pkgbuild 2>/dev/null | ||||
|                 local artixver=$(get_full_version $pkg) | ||||
|                 local is_entry=false | ||||
|  | ||||
|                 for name in ${pkgname[@]};do | ||||
|  | ||||
|                     if is_db_entry "$name-$artixver" "$repo";then | ||||
|                         is_entry=true | ||||
|                     fi | ||||
|                     if ! $is_entry; then | ||||
|                         msg_row "%-20s %-35s %-20s %-10s" "$repo" "$name" "$artixver" "$is_entry" | ||||
|                     fi | ||||
|                 done | ||||
|                 unset artixver is_entry pkgbuild pkgver epoch pkgname pkgbase | ||||
|             fi | ||||
|         done | ||||
|     done | ||||
| } | ||||
|  | ||||
| update_db_cache(){ | ||||
|     msg "Updating database cache" | ||||
|     for repo in "${searchrepos[@]}"; do | ||||
|         local cachedir=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo} | ||||
|         rm -rf "$cachedir" | ||||
|         mkdir -p "$cachedir" | ||||
|         msg2 "%s" "$repo" | ||||
|         curl -s "${REPOS_MIRROR}/${repo}/os/${ARCH}/${repo}.${LINKSDBEXT}" \ | ||||
|             | bsdtar -xf - -C "$cachedir" | ||||
|     done | ||||
|     msg "Done" | ||||
| } | ||||
|  | ||||
| query_db() { | ||||
|     msg_table_header "%-20s %-45s %s" "Repo" "Package" "Library" | ||||
|     for repo in "${searchrepos[@]}"; do | ||||
|         local prefix= | ||||
|         local db=${USERCACHEDIR}/${LINKSDBEXT}/${ARCH}/${repo}/ | ||||
|         if [[ -d ${db} ]]; then | ||||
|             while read -rd '' pkg; do | ||||
|                 read -r match | ||||
|                 pkg=${pkg#${db}} | ||||
|                 pkg="${pkg%/*}" | ||||
|  | ||||
|                 msg_row "%-20s %-45s %s" "${repo}" "${pkg}" "${match}" | ||||
|             done < <(grep -rZ "${library}" "${db}") | sort -u | ||||
|         fi | ||||
|     done | ||||
|     exit 0 | ||||
| } | ||||
|  | ||||
| show_version_table(){ | ||||
|     msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" | ||||
|  | ||||
|     if ${check};then | ||||
|         ${sync} && update_db_cache | ||||
|         msg_table_header "%-20s %-35s %-20s %-10s" "Repo" "Package" "Version" "Database" | ||||
|     elif ${query};then | ||||
|         ${sync} && update_db_cache | ||||
|         query_db | ||||
|     else | ||||
|         msg_table_header "%-20s %-20s %-25s %-30s %-30s" "Arch Repo" "Artix Repo" "Package" "Arch version" "Artix version" | ||||
|     fi | ||||
|  | ||||
|     for tree in ${TREE_NAMES_ARTIX[@]};do | ||||
|  | ||||
|         local git=$(find ${TREE_DIR_ARTIX}/$tree/ -mindepth 1 -maxdepth 1 -type d) | ||||
|  | ||||
|         for package in ${git[@]}; do | ||||
|  | ||||
|             local pkg=${package##*/} | ||||
|             local artixrepo=$(find_repo "$package" "${staging}" "${unstable}") | ||||
|             local artixshow=${artixrepo%-*} | ||||
|             local pkgbuild=$package/repos/$artixrepo/PKGBUILD | ||||
|  | ||||
|             if [[ -f $pkgbuild ]];then | ||||
|  | ||||
|                 . $pkgbuild 2>/dev/null | ||||
|                 local artixver=$(get_full_version $pkg) | ||||
|  | ||||
|                 local archpath=$(get_import_path $pkg) | ||||
|  | ||||
|                 local archrepo=$(find_repo "$archpath" "${staging}" "${unstable}") | ||||
|  | ||||
|                 local archshow=${archrepo%-*} | ||||
|                 pkgbuild=$archpath/repos/$archrepo/PKGBUILD | ||||
|  | ||||
|                 if [[ -f $pkgbuild ]];then | ||||
|                     . $pkgbuild 2>/dev/null | ||||
|                     local archver=$(get_full_version $pkg) | ||||
|                 fi | ||||
|  | ||||
|                 local result=$(vercmp "$artixver" "$archver") | ||||
|  | ||||
|                 local repomatch=false | ||||
|                 [[ "$archrepo" == "$artixrepo" ]] && repomatch=true | ||||
|  | ||||
|                 if ${move};then | ||||
|  | ||||
|                     if [ $result -gt -1 ];then | ||||
|                         case $artixrepo in | ||||
|                             *testing*|*staging*) | ||||
|                                 if $repomatch;then | ||||
|                                     msg_row "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                                 else | ||||
|                                     msg_row_notify "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                                 fi | ||||
|                             ;; | ||||
|                         esac | ||||
|                     fi | ||||
|  | ||||
|                 elif ${upgrades};then | ||||
|  | ||||
|                     if [ $result -eq -1 ];then | ||||
|                         msg_row_upgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                     fi | ||||
|  | ||||
|                 elif ${downgrades};then | ||||
|  | ||||
|                     if [ $result -eq 1 ];then | ||||
|                         if [[ -n $archver ]] && [[ -n $archrepo ]];then | ||||
|                             msg_row_downgrade "%-20s %-20s %-25s %-30s %-30s" "$archshow" "$artixshow" "$pkg" "$archver" "$artixver" | ||||
|                         fi | ||||
|                     fi | ||||
|  | ||||
|                 fi | ||||
|                 unset pkgver epoch pkgrel artixver archver pkgbuild archpath | ||||
|  | ||||
|             if ${check};then | ||||
|                 check_db "$package" | ||||
|             else | ||||
|                 compare "$package" | ||||
|             fi | ||||
|         done | ||||
|     done | ||||
| @@ -98,14 +187,31 @@ staging=true | ||||
| upgrades=false | ||||
| downgrades=false | ||||
| move=false | ||||
| check=false | ||||
| sync=false | ||||
| query=false | ||||
|  | ||||
| artix_repos=( | ||||
|     'goblins' 'gremlins' 'system' 'world' | ||||
|     'galaxy-goblins' 'galaxy-gremlins' 'galaxy' | ||||
|     'lib32-goblins' 'lib32-gremlins' 'lib32' | ||||
|     'gnome-wobble' 'kde-wobble' | ||||
| ) | ||||
|  | ||||
| searchrepos=(${artix_repos[@]}) | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo "Usage: ${0##*/} [options] (with -q [libname])" | ||||
|     echo '    -u            Show upgrade packages' | ||||
|     echo '    -d            Show downgrade packages' | ||||
|     echo '    -m            Show packages to move' | ||||
|     echo "    -x            Don't inlcude staging packages" | ||||
|     echo '    -y            Include unstable kde and gnome' | ||||
|     echo '    -c            Check repos' | ||||
|     echo "    -s            Sync repo databases" | ||||
|     echo "    -q            Query repo databases for so libs" | ||||
|     echo '    -r <repo>     Repo name to query' | ||||
|     echo '                  [default: all]' | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
| @@ -114,7 +220,7 @@ usage() { | ||||
|  | ||||
| orig_argv=("$0" "$@") | ||||
|  | ||||
| opts='udmxyh' | ||||
| opts='r:qcsudmxyh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
| @@ -123,6 +229,10 @@ while getopts "${opts}" arg; do | ||||
|         m) move=true ;; | ||||
|         x) staging=false ;; | ||||
|         y) unstable=true ;; | ||||
|         c) check=true ;; | ||||
|         s) sync=true ;; | ||||
|         q) query=true ;; | ||||
|         r) searchrepos=("$OPTARG") ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| @@ -130,4 +240,6 @@ done | ||||
|  | ||||
| shift $(($OPTIND - 1)) | ||||
|  | ||||
| library="$1"; shift | ||||
|  | ||||
| show_version_table | ||||
|   | ||||
| @@ -16,7 +16,7 @@ | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| update_repo(){ | ||||
|     local repo="$1" pkgfile ver ext=db.tar.xz | ||||
|     local repo="$1" pkgfile ver | ||||
|     local repo_path=${REPOS_ROOT}/$repo/os/${ARCH} packages=() | ||||
|  | ||||
|     . PKGBUILD | ||||
| @@ -51,7 +51,11 @@ update_repo(){ | ||||
|         fi | ||||
|     done | ||||
|     cd $repo_path | ||||
|     [[ -n $action ]] && repo-$action -R $repo.$ext ${packages[@]} | ||||
|     if [[ -n $action ]]; then | ||||
|         repo-$action -R $repo.${PKGDBEXT} ${packages[@]} | ||||
|         ${linksdb} && links-$action $repo.${LINKSDBEXT} ${packages[@]} | ||||
|     fi | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| @@ -64,6 +68,7 @@ load_vars /etc/makepkg.conf | ||||
| add_pkg=false | ||||
| del_pkg=false | ||||
| sign_pkg=false | ||||
| linksdb=false | ||||
|  | ||||
| cmd=${0##*/} | ||||
| dest_repo=${cmd#*-} | ||||
| @@ -72,6 +77,7 @@ usage() { | ||||
|     echo "Usage: ${cmd} [options]" | ||||
|     echo '    -a                 Add package(s) to repository' | ||||
|     echo '    -r                 Remove package(s) from repository' | ||||
|     echo '    -l                 Use links db' | ||||
|     echo '    -s                 Sign package(s)' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
| @@ -79,12 +85,13 @@ usage() { | ||||
|     exit $1 | ||||
| } | ||||
|  | ||||
| opts='arsh' | ||||
| opts='arlsh' | ||||
|  | ||||
| while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         a) add_pkg=true; del_pkg=false ;; | ||||
|         r) del_pkg=true; add_pkg=false ;; | ||||
|         l) linksdb=true ;; | ||||
|         s) sign_pkg=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|   | ||||
| @@ -1,102 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # Copyright (C) 2018-19 artoo@artixlinux.org | ||||
| # Copyright (C) 2018 Artix Linux Developers | ||||
| # | ||||
| # This program 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; version 2 of the License. | ||||
| # | ||||
| # This program 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. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
| . @libdir@/artools/util-pkg.sh | ||||
|  | ||||
| # $1: sofile | ||||
| # $2: soarch | ||||
| process_sofile() { | ||||
|     # extract the library name: libfoo.so | ||||
|     local soname="${1%.so?(+(.+([0-9])))}".so | ||||
|     # extract the major version: 1 | ||||
|     soversion="${1##*\.so\.}" | ||||
|     if [[ "$soversion" = "$1" ]] && (($IGNORE_INTERNAL)); then | ||||
|         return | ||||
|     fi | ||||
|     if ! in_array "${soname}=${soversion}-$2" ${soobjects[@]}; then | ||||
|     # libfoo.so=1-64 | ||||
|         msg "${soname}=${soversion}-$2" | ||||
|         soobjects+=("${soname}=${soversion}-$2") | ||||
|     fi | ||||
| } | ||||
|  | ||||
| set -e | ||||
| shopt -s extglob | ||||
|  | ||||
| IGNORE_INTERNAL=0 | ||||
|  | ||||
| if [[ $1 = "--ignore-internal" ]]; then | ||||
|     IGNORE_INTERNAL=1 | ||||
|     shift | ||||
| fi | ||||
|  | ||||
| script_mode=${0##*/find-lib} | ||||
|  | ||||
| case $script_mode in | ||||
|     deps|provides) true;; | ||||
|     *) die "Unknown mode %s" "$script_mode" ;; | ||||
| esac | ||||
|  | ||||
| if [[ -z $1 ]]; then | ||||
|     echo "${0##*/} [options] <package file|extracted package dir>" | ||||
|     echo "Options:" | ||||
|     echo "    --ignore-internal      ignore internal libraries" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| if [[ -d $1 ]]; then | ||||
|     pushd $1 >/dev/null | ||||
| else | ||||
|     WORKDIR=$(mktemp -d --tmpdir "${0##*/}.XXXXXXXXXX") | ||||
|  | ||||
|     case ${script_mode} in | ||||
|         deps) bsdtar -C "$WORKDIR" -xf "$1";; | ||||
|         provides) bsdtar -C "$WORKDIR" -xf "$1" --include="*.so*";; | ||||
|     esac | ||||
|  | ||||
|     pushd "$WORKDIR" >/dev/null | ||||
| fi | ||||
|  | ||||
| case $script_mode in | ||||
|     deps) find_args=(-perm -u+x);; | ||||
|     provides) find_args=(-name *.so*);; | ||||
| esac | ||||
|  | ||||
| find $PWD -type f "${find_args[@]}" | while read filename; do | ||||
|     if [[ $script_mode = "provides" ]]; then | ||||
|         # ignore if we don't have a shared object | ||||
|         if ! LC_ALL=C readelf -h "$filename" 2>/dev/null | grep -q '.*Type:.*DYN (Shared object file).*'; then | ||||
|             continue | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     # get architecture of the file; if soarch is empty it's not an ELF binary | ||||
|     soarch=$(LC_ALL=C readelf -h "$filename" 2>/dev/null | sed -n 's/.*Class.*ELF\(32\|64\)/\1/p') | ||||
|     [[ -n $soarch ]] || continue | ||||
|  | ||||
|     if [[ $script_mode = "provides" ]]; then | ||||
|         # get the string binaries link to: libfoo.so.1.2 -> libfoo.so.1 | ||||
|         sofile=$(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -n 's/.*Library soname: \[\(.*\)\].*/\1/p') | ||||
|         [[ -z $sofile ]] && sofile="${filename##*/}" | ||||
|         process_sofile "${sofile}" "${soarch}" | ||||
|     elif [[ $script_mode = "deps" ]]; then | ||||
|         # process all libraries needed by the binary | ||||
|         for sofile in $(LC_ALL=C readelf -d "$filename" 2>/dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p'); do | ||||
|             process_sofile "${sofile}" "${soarch}" | ||||
|         done | ||||
|     fi | ||||
| done | ||||
|  | ||||
| popd >/dev/null | ||||
| @@ -1,48 +0,0 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # Copyright (C) 2018-19 artoo@artixlinux.org | ||||
| # Copyright (C) 2018 Artix Linux Developers | ||||
| # | ||||
| # This program 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; version 2 of the License. | ||||
| # | ||||
| # This program 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. | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
|  | ||||
| match=$1 | ||||
|  | ||||
| if [[ -z $match ]]; then | ||||
|     echo 'Usage: finddeps <depname>' | ||||
|     echo '' | ||||
|     echo 'Find packages that depend on a given depname.' | ||||
|     echo 'Run this script from the top-level directory of your ABS tree.' | ||||
|     echo '' | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| find $PWD -type d | while read d; do | ||||
|     if [[ -f "$d/PKGBUILD" ]]; then | ||||
|         unset pkgname depends makedepends optdepends | ||||
|         . "$d/PKGBUILD" | ||||
|         for dep in "${depends[@]}"; do | ||||
|             # lose the version comparator, if any | ||||
|             depname=${dep%%[<>=]*} | ||||
|             [[ $depname = $match ]] && msg "$d (depends)" | ||||
|         done | ||||
|         for dep in "${makedepends[@]}"; do | ||||
|             # lose the version comparator, if any | ||||
|             depname=${dep%%[<>=]*} | ||||
|             [[ $depname = $match ]] && msg "$d (makedepends)" | ||||
|         done | ||||
|         for dep in "${optdepends[@]/:*}"; do | ||||
|             # lose the version comaparator, if any | ||||
|             depname=${dep%%[<>=]*} | ||||
|             [[ $depname = $match ]] && msg "$d (optdepends)" | ||||
|         done | ||||
|     fi | ||||
| done | ||||
							
								
								
									
										518
									
								
								bin/pkg/links-add.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										518
									
								
								bin/pkg/links-add.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,518 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| #   links-add - add a package to a given repo database file | ||||
| #   links-remove - remove a package entry from a given repo database file | ||||
| # | ||||
| #   Copyright (c) 2006-2018 Pacman Development Team <pacman-dev@archlinux.org> | ||||
| #   Copyright (c) 2019 artoo@artixlinux.org | ||||
| # | ||||
| #   This program 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 2 of the License, or | ||||
| #   (at your option) any later version. | ||||
| # | ||||
| #   This program 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 this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  | ||||
| shopt -s extglob | ||||
|  | ||||
| declare -r REPO_DB_NAME="links" | ||||
|  | ||||
| QUIET=0 | ||||
| ONLYADDNEW=0 | ||||
| SIGN=0 | ||||
| KEY=0 | ||||
| VERIFY=0 | ||||
| REPO_DB_FILE= | ||||
| REPO_DB_PREFIX= | ||||
| REPO_DB_SUFFIX= | ||||
| LOCKFILE= | ||||
| CLEAN_LOCK=0 | ||||
|  | ||||
| . @libdir@/artools/util-base.sh | ||||
|  | ||||
| # ensure we have a sane umask set | ||||
| umask 0022 | ||||
|  | ||||
| # print usage instructions | ||||
| usage() { | ||||
|     cmd=${0##*/} | ||||
|     printf -- "%s \n\n" "$cmd" | ||||
|     if [[ $cmd == "links-add" ]] ; then | ||||
|         printf -- "Usage: links-add [options] <path-to-db> <package> ...\n" | ||||
|         printf -- "\n" | ||||
|         printf -- "\ | ||||
| links-add will update a package database by reading a package file.\n\ | ||||
| Multiple packages to add can be specified on the command line.\n" | ||||
|         printf -- "\n" | ||||
|         printf -- "Options:\n" | ||||
|         printf -- "  -n, --new         only add packages that are not already in the database\n" | ||||
|     elif [[ $cmd == "links-remove" ]] ; then | ||||
|         printf -- "Usage: links-remove [options] <path-to-db> <packagename> ...\n" | ||||
|         printf -- "\n" | ||||
|         printf -- "\ | ||||
| links-remove will update a package database by removing the package name\n\ | ||||
| specified on the command line from the given repo database. Multiple\n\ | ||||
| packages to remove can be specified on the command line.\n" | ||||
|         printf -- "\n" | ||||
|         printf -- "Options:\n" | ||||
|     else | ||||
|         printf -- "Please move along, there is nothing to see here.\n" | ||||
|         return | ||||
|     fi | ||||
|     printf -- "  --nocolor         turn off color in output\n" | ||||
|     printf -- "  -q, --quiet       minimize output\n" | ||||
|     printf -- "  -s, --sign        sign database with GnuPG after update\n" | ||||
|     printf -- "  -k, --key <key>   use the specified key to sign the database\n" | ||||
|     printf -- "  -v, --verify      verify database's signature before update\n" | ||||
|     printf -- "\n\ | ||||
| See %s(8) for more details and descriptions of the available options.\n" $cmd | ||||
|     printf "\n" | ||||
|     if [[ $cmd == "links-add" ]] ; then | ||||
|         printf -- "Example:  links-add /path/to/repo.${LINKSDBEXT} pacman-5.1.3-1-x86_64.pkg.tar.xz\n" | ||||
|     elif [[ $cmd == "links-remove" ]] ; then | ||||
|         printf -- "Example:  links-remove /path/to/repo.${LINKSDBEXT} kernel26\n" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| find_pkgentry() { | ||||
|     local pkgname=$1 | ||||
|     local pkgentry | ||||
|  | ||||
|     for pkgentry in "$tmpdir/${REPO_DB_NAME}/$pkgname"*; do | ||||
|         name=${pkgentry##*/} | ||||
|         if [[ ${name%-*-*} = $pkgname ]]; then | ||||
|             echo $pkgentry | ||||
|             return 0 | ||||
|         fi | ||||
|     done | ||||
|     return 1 | ||||
| } | ||||
|  | ||||
| check_gpg() { | ||||
|     if ! type -p gpg >/dev/null; then | ||||
|         error "Cannot find the gpg binary! Is GnuPG installed?" | ||||
|         exit 1 # $E_MISSING_PROGRAM | ||||
|     fi | ||||
|  | ||||
|     if (( ! VERIFY )); then | ||||
|         if ! gpg --list-key ${GPGKEY} &>/dev/null; then | ||||
|             if [[ ! -z $GPGKEY ]]; then | ||||
|                 error "The key ${GPGKEY} does not exist in your keyring." | ||||
|             elif (( ! KEY )); then | ||||
|                 error "There is no key in your keyring." | ||||
|             fi | ||||
|             exit 1 | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
|  | ||||
| # sign the package database once repackaged | ||||
| create_signature() { | ||||
|     (( ! SIGN )) && return | ||||
|     local dbfile=$1 | ||||
|     local ret=0 | ||||
|     msg "Signing database '%s'..." "${dbfile##*/.tmp.}" | ||||
|  | ||||
|     local SIGNWITHKEY="" | ||||
|     if [[ -n $GPGKEY ]]; then | ||||
|         SIGNWITHKEY="-u ${GPGKEY}" | ||||
|     fi | ||||
|     gpg --detach-sign --use-agent --no-armor ${SIGNWITHKEY} "$dbfile" &>/dev/null || ret=$? | ||||
|  | ||||
|     if (( ! ret )); then | ||||
|         msg2 "Created signature file '%s'" "${dbfile##*/.tmp.}.sig" | ||||
|     else | ||||
|         warning "Failed to sign package database file '%s'" "${dbfile##*/.tmp.}" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| # verify the existing package database signature | ||||
| verify_signature() { | ||||
|     (( ! VERIFY )) && return | ||||
|     local dbfile=$1 | ||||
|     local ret=0 | ||||
|     msg "Verifying database signature..." | ||||
|  | ||||
|     if [[ ! -f $dbfile.sig ]]; then | ||||
|         warning "No existing signature found, skipping verification." | ||||
|         return | ||||
|     fi | ||||
|     gpg --verify "$dbfile.sig" || ret=$? | ||||
|     if (( ! ret )); then | ||||
|         msg2 "Database signature file verified." | ||||
|     else | ||||
|         error "Database signature was NOT valid!" | ||||
|         exit 1 | ||||
|     fi | ||||
| } | ||||
|  | ||||
| verify_repo_extension() { | ||||
|     local repofile=$1 | ||||
|  | ||||
|     case $repofile in | ||||
|         *.links.tar.gz)  TAR_OPT="z" ;; | ||||
|         *.links.tar.bz2) TAR_OPT="j" ;; | ||||
|         *.links.tar.xz)  TAR_OPT="J" ;; | ||||
|         *.links.tar.zst) TAR_OPT="--zstd" ;; | ||||
|         *.links.tar.Z)   TAR_OPT="Z" ;; | ||||
|         *.links.tar)     TAR_OPT="" ;; | ||||
|         *) error "'%s' does not have a valid database archive extension." \ | ||||
|                 "$repofile" | ||||
|             exit 1 ;; | ||||
|     esac | ||||
|  | ||||
|     printf '%s' "$TAR_OPT" | ||||
| } | ||||
|  | ||||
| # write an entry to the pacman database | ||||
| #   arg1 - path to package | ||||
| db_write_entry() { | ||||
|     # blank out all variables | ||||
|     local pkgfile=$1 | ||||
|  | ||||
|     local pkgname pkgver | ||||
|  | ||||
|     # read info from the zipped package | ||||
|     local line var val | ||||
|     while read -r line; do | ||||
|         [[ ${line:0:1} = '#' ]] && continue | ||||
|         IFS=' =' read -r var val < <(printf '%s\n' "$line") | ||||
|         # normalize whitespace with an extglob | ||||
|         declare "$var=${val//+([[:space:]])/ }" | ||||
|  | ||||
|     done< <(bsdtar -xOqf "$pkgfile" .PKGINFO) | ||||
|  | ||||
|     # ensure $pkgname and $pkgver variables were found | ||||
|     if [[ -z $pkgname || -z $pkgver ]]; then | ||||
|         error "Invalid package file '%s'." "$pkgfile" | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     if [[ -d $tmpdir/${REPO_DB_NAME}/$pkgname-$pkgver ]]; then | ||||
|         warning "An entry for '%s' already existed" "$pkgname-$pkgver" | ||||
|         if (( ONLYADDNEW )); then | ||||
|             return 0 | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     # remove an existing entry if it exists, ignore failures | ||||
|     db_remove_entry "$pkgname" | ||||
|  | ||||
|     local tmppkg=$tmpdir/pkg/$pkgname-$pkgver | ||||
|  | ||||
|     mkdir "$tmppkg" | ||||
|  | ||||
|     bsdtar -xof $pkgfile -C $tmppkg --include={opt,{,usr/}{lib{,32},{s,}bin}}'/*' 2>/dev/null | ||||
|  | ||||
|     pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null | ||||
|     mkdir "$pkgname-$pkgver" | ||||
|     pushd "$pkgname-$pkgver" >/dev/null | ||||
|  | ||||
|     # create links entry | ||||
|     msg2 "Creating '%s' db entry..." "${REPO_DB_NAME}" | ||||
|  | ||||
|     local linksentry=$tmpdir/${REPO_DB_NAME}/$pkgname-$pkgver/${REPO_DB_NAME} | ||||
|  | ||||
|     for f in $(find $tmppkg -type f); do | ||||
|         readelf -d "$f" 2> /dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p' | ||||
|     done | sort -u > $linksentry | ||||
|  | ||||
|     popd >/dev/null | ||||
|     popd >/dev/null | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| # remove existing entries from the DB | ||||
| #   arg1 - package name | ||||
| db_remove_entry() { | ||||
|     local pkgname=$1 | ||||
|     local notfound=1 | ||||
|     local pkgentry=$(find_pkgentry "$pkgname") | ||||
|     while [[ -n $pkgentry ]]; do | ||||
|         notfound=0 | ||||
|  | ||||
|         msg2 "Removing existing entry '%s'..." \ | ||||
|         "${pkgentry##*/}" | ||||
|         rm -rf "$pkgentry" | ||||
|  | ||||
|         # remove entries in "links" database | ||||
|         local linksentry=$(echo "$pkgentry" | sed 's/\(.*\)\/db\//\1\/links\//') | ||||
|         rm -rf "$linksentry" | ||||
|  | ||||
|         pkgentry=$(find_pkgentry "$pkgname") | ||||
|     done | ||||
|     return $notfound | ||||
| } | ||||
|  | ||||
| prepare_repo_db() { | ||||
|     local repodir dbfile | ||||
|  | ||||
|     # ensure the path to the DB exists; $LOCKFILE is always an absolute path | ||||
|     repodir=${LOCKFILE%/*}/ | ||||
|  | ||||
|     if [[ ! -d $repodir ]]; then | ||||
|         error "%s does not exist or is not a directory." "$repodir" | ||||
|         exit 1 | ||||
|     fi | ||||
|  | ||||
|     # check lock file | ||||
|     if ( set -o noclobber; echo "$$" > "$LOCKFILE") 2> /dev/null; then | ||||
|         CLEAN_LOCK=1 | ||||
|     else | ||||
|         error "Failed to acquire lockfile: %s." "$LOCKFILE" | ||||
|         [[ -f $LOCKFILE ]] && error "Held by process %s" "$(cat "$LOCKFILE")" | ||||
|         exit 1 | ||||
|     fi | ||||
|  | ||||
|     dbfile=${repodir}/$REPO_DB_PREFIX.${REPO_DB_NAME}.$REPO_DB_SUFFIX | ||||
|  | ||||
|     if [[ -f $dbfile ]]; then | ||||
|         # there are two situations we can have here: | ||||
|         # a DB with some entries, or a DB with no contents at all. | ||||
|         if ! bsdtar -tqf "$dbfile" '*/links' >/dev/null 2>&1; then | ||||
|             # check empty case | ||||
|             if [[ -n $(bsdtar -tqf "$dbfile" '*' 2>/dev/null) ]]; then | ||||
|                 error "Repository file '%s' is not a proper links database." "$dbfile" | ||||
|                 exit 1 | ||||
|             fi | ||||
|         fi | ||||
|         verify_signature "$dbfile" | ||||
|         msg "Extracting %s to a temporary location..." "${dbfile##*/}" | ||||
|         bsdtar -xf "$dbfile" -C "$tmpdir/${REPO_DB_NAME}" | ||||
|     else | ||||
|         case $cmd in | ||||
|             links-remove) | ||||
|                 # only a missing "db" database is currently an error | ||||
|                 # TODO: remove if statement | ||||
|                 if [[ ${REPO_DB_NAME} == "links" ]]; then | ||||
|                     error "Repository file '%s' was not found." "$dbfile" | ||||
|                     exit 1 | ||||
|                 fi | ||||
|                 ;; | ||||
|             links-add) | ||||
|                 # check if the file can be created (write permission, directory existence, etc) | ||||
|                 if ! touch "$dbfile"; then | ||||
|                     error "Repository file '%s' could not be created." "$dbfile" | ||||
|                     exit 1 | ||||
|                 fi | ||||
|                 rm -f "$dbfile" | ||||
|                 ;; | ||||
|         esac | ||||
|     fi | ||||
| } | ||||
|  | ||||
| add() { | ||||
|     if [[ ! -f $1 ]]; then | ||||
|         error "File '%s' not found." "$1" | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     pkgfile=$1 | ||||
|     if ! bsdtar -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then | ||||
|         error "'%s' is not a package file, skipping" "$pkgfile" | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     msg "Adding package '%s'" "$pkgfile" | ||||
|  | ||||
|     db_write_entry "$pkgfile" | ||||
| } | ||||
|  | ||||
| remove() { | ||||
|     pkgname=$1 | ||||
|     msg "Searching for package '%s'..." "$pkgname" | ||||
|  | ||||
|     if ! db_remove_entry "$pkgname"; then | ||||
|         error "Package matching '%s' not found." "$pkgname" | ||||
|         return 1 | ||||
|     fi | ||||
|  | ||||
|     return 0 | ||||
| } | ||||
|  | ||||
| rotate_db() { | ||||
|     dirname=${LOCKFILE%/*} | ||||
|  | ||||
|     pushd "$dirname" >/dev/null | ||||
|  | ||||
|     filename=${REPO_DB_PREFIX}.${REPO_DB_NAME}.${REPO_DB_SUFFIX} | ||||
|     tempname=$dirname/.tmp.$filename | ||||
|  | ||||
|     # hardlink or move the previous version of the database and signature to .old | ||||
|     # extension as a backup measure | ||||
|     if [[ -f $filename ]]; then | ||||
|         ln -f "$filename" "$filename.old" 2>/dev/null || \ | ||||
|             mv -f "$filename" "$filename.old" | ||||
|  | ||||
|         if [[ -f $filename.sig ]]; then | ||||
|             ln -f "$filename.sig" "$filename.old.sig" 2>/dev/null || \ | ||||
|                 mv -f "$filename.sig" "$filename.old.sig" | ||||
|         else | ||||
|             rm -f "$filename.old.sig" | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
|     # rotate the newly-created database and signature into place | ||||
|     mv "$tempname" "$filename" | ||||
|     if [[ -f $tempname.sig ]]; then | ||||
|         mv "$tempname.sig" "$filename.sig" | ||||
|     fi | ||||
|  | ||||
|     dblink=${filename%.tar*} | ||||
|     rm -f "$dblink" "$dblink.sig" | ||||
|     ln -s "$filename" "$dblink" 2>/dev/null || \ | ||||
|         ln "$filename" "$dblink" 2>/dev/null || \ | ||||
|         cp "$filename" "$dblink" | ||||
|     if [[ -f "$filename.sig" ]]; then | ||||
|         ln -s "$filename.sig" "$dblink.sig" 2>/dev/null || \ | ||||
|             ln "$filename.sig" "$dblink.sig" 2>/dev/null || \ | ||||
|             cp "$filename.sig" "$dblink.sig" | ||||
|     fi | ||||
|  | ||||
|     popd >/dev/null | ||||
| } | ||||
|  | ||||
| create_db() { | ||||
|     TAR_OPT=$(verify_repo_extension "$REPO_DB_FILE") | ||||
|     # $LOCKFILE is already guaranteed to be absolute so this is safe | ||||
|     dirname=${LOCKFILE%/*} | ||||
|  | ||||
|     filename=${REPO_DB_PREFIX}.${REPO_DB_NAME}.${REPO_DB_SUFFIX} | ||||
|     # this ensures we create it on the same filesystem, making moves atomic | ||||
|     tempname=$dirname/.tmp.$filename | ||||
|  | ||||
|     pushd "$tmpdir/${REPO_DB_NAME}" >/dev/null | ||||
|     if ( shopt -s nullglob; files=(*); (( ${#files[*]} )) ); then | ||||
|         bsdtar -c${TAR_OPT}f "$tempname" * | ||||
|     else | ||||
|         # we have no packages remaining? zip up some emptyness | ||||
|         warning "No packages remain, creating empty database." | ||||
|         bsdtar -c${TAR_OPT}f "$tempname" -T /dev/null | ||||
|     fi | ||||
|     popd >/dev/null | ||||
|  | ||||
|     create_signature "$tempname" | ||||
| } | ||||
|  | ||||
| trap_exit() { | ||||
|     # unhook all traps to avoid race conditions | ||||
|     trap '' EXIT TERM HUP QUIT INT ERR | ||||
|  | ||||
|     echo | ||||
|     error "$@" | ||||
|     clean_up 1 | ||||
| } | ||||
|  | ||||
| clean_up() { | ||||
|     local exit_code=${1:-$?} | ||||
|  | ||||
|     # unhook all traps to avoid race conditions | ||||
|     trap '' EXIT TERM HUP QUIT INT ERR | ||||
|  | ||||
|     [[ -d $tmpdir ]] && rm -rf "$tmpdir" | ||||
|     (( CLEAN_LOCK )) && [[ -f $LOCKFILE ]] && rm -f "$LOCKFILE" | ||||
|  | ||||
|     exit $exit_code | ||||
| } | ||||
|  | ||||
| # PROGRAM START | ||||
| case $1 in | ||||
|     -h|--help) usage; exit 0;; | ||||
| esac | ||||
|  | ||||
| # figure out what program we are | ||||
| cmd=${0##*/} | ||||
|  | ||||
| if [[ $cmd != "links-add" && $cmd != "links-remove" ]]; then | ||||
|     error "Invalid command name '%s' specified." "$cmd" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/repo-tools.XXXXXXXXXX") || (\ | ||||
|     error "Cannot create temp directory for database building."; \ | ||||
|     exit 1) | ||||
|  | ||||
| for repo in "pkg" "${REPO_DB_NAME}"; do | ||||
|     mkdir "$tmpdir/$repo" | ||||
| done | ||||
|  | ||||
| trap 'clean_up' EXIT | ||||
| for signal in TERM HUP QUIT; do | ||||
|     trap "trap_exit \"$(gettext "%s signal caught. Exiting...")\" \"$signal\"" "$signal" | ||||
| done | ||||
| trap 'trap_exit "$(gettext "Aborted by user! Exiting...")"' INT | ||||
| trap 'trap_exit "$(gettext "An unknown error has occurred. Exiting...")"' ERR | ||||
|  | ||||
| declare -a args | ||||
| # parse arguments | ||||
| while (( $# )); do | ||||
|     case $1 in | ||||
|         -q|--quiet) QUIET=1 ;; | ||||
|         -n|--new) ONLYADDNEW=1 ;; | ||||
|         -s|--sign) SIGN=1 ;; | ||||
|         -k|--key) KEY=1 ; shift; GPGKEY=$1 ;; | ||||
|         -v|--verify) VERIFY=1 ;; | ||||
|         *) args+=("$1") ;; | ||||
|     esac | ||||
|     shift | ||||
| done | ||||
|  | ||||
| REPO_DB_FILE=${args[0]} | ||||
| if [[ -z $REPO_DB_FILE ]]; then | ||||
|     usage | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| if [[ $REPO_DB_FILE == /* ]]; then | ||||
|     LOCKFILE=$REPO_DB_FILE.lck | ||||
| else | ||||
|     LOCKFILE=$PWD/$REPO_DB_FILE.lck | ||||
| fi | ||||
|  | ||||
| verify_repo_extension "$REPO_DB_FILE" >/dev/null | ||||
|  | ||||
| REPO_DB_PREFIX=${REPO_DB_FILE##*/} | ||||
| REPO_DB_PREFIX=${REPO_DB_PREFIX%.links.*} | ||||
| REPO_DB_SUFFIX=${REPO_DB_FILE##*.links.} | ||||
|  | ||||
| if (( SIGN || VERIFY )); then | ||||
|     check_gpg | ||||
| fi | ||||
|  | ||||
| if (( VERIFY && ${#args[@]} == 1 )); then | ||||
|     dbfile=${repodir}/$REPO_DB_PREFIX.${REPO_DB_NAME}.$REPO_DB_SUFFIX | ||||
|  | ||||
|     if [[ -f $dbfile ]]; then | ||||
|         verify_signature "$dbfile" | ||||
|     fi | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| prepare_repo_db | ||||
|  | ||||
| fail=0 | ||||
| for arg in "${args[@]:1}"; do | ||||
|     case $cmd in | ||||
|         links-add) add "$arg" ;; | ||||
|         links-remove) remove "$arg" ;; | ||||
|     esac || fail=1 | ||||
| done | ||||
|  | ||||
| # if the whole operation was a success, re-zip and rotate databases | ||||
| if (( !fail )); then | ||||
|     msg "Creating updated database file '%s'" "$REPO_DB_FILE" | ||||
|     create_db | ||||
|     rotate_db | ||||
| else | ||||
|     msg "No packages modified, nothing to do." | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| exit 0 | ||||
| @@ -339,7 +339,7 @@ main() { | ||||
|     [[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.' | ||||
|     makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}} | ||||
|  | ||||
|     check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME | ||||
|     check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER | ||||
|  | ||||
|     # Canonicalize chrootdir, getting rid of trailing / | ||||
|     chrootdir=$(readlink -e "$passeddir") | ||||
|   | ||||
| @@ -84,11 +84,16 @@ write_pkg_yaml(){ | ||||
|  | ||||
|     Yaml+=$(write_empty_line) | ||||
|  | ||||
|     local full=$(get_full_version) | ||||
|  | ||||
|     local ver=${full:-0} | ||||
|  | ||||
|     pkgbase=${pkgbase:-${pkgname[0]}} | ||||
|  | ||||
|     Yaml+=$(write_yaml_map 0 "pkgbase") | ||||
|     Yaml+=$(write_yaml_map 2 "pkgname" "${pkgbase}") | ||||
|     ${details} && write_details '' | ||||
|     Yaml+=$(write_yaml_map 2 "fullver" "${ver}") | ||||
|  | ||||
|     Yaml+=$(write_empty_line) | ||||
|  | ||||
|   | ||||
| @@ -29,7 +29,14 @@ | ||||
| #         packages-python | ||||
| #         packages-perl | ||||
| #         packages-qt5 | ||||
| #         packages-devel | ||||
| #         packages-ruby | ||||
| #         packages-gtk | ||||
| #         packages-gnome | ||||
| #         packages-cinnamon | ||||
| #         packages-lxqt | ||||
| #         packages-mate | ||||
| #         packages-kde | ||||
| # ) | ||||
|  | ||||
| # HOST_TREE_ARCH=git://git.archlinux.org/svntogit | ||||
| @@ -41,6 +48,9 @@ | ||||
| # default repos root | ||||
| # REPOS_ROOT=${WORKSPACE_DIR}/repos | ||||
|  | ||||
| # default mirror for sogrep | ||||
| # REPOS_MIRROR="http://mirror1.artixlinux.org/repos" | ||||
|  | ||||
| ############################################# | ||||
| ################ artools-iso ################ | ||||
| ############################################# | ||||
|   | ||||
| @@ -1,63 +0,0 @@ | ||||
| accountsservice | ||||
| cairo | ||||
| colord | ||||
| cppunit | ||||
| dbus | ||||
| dbus-glib | ||||
| dbus-python | ||||
| desktop-file-utils | ||||
| fontconfig | ||||
| geoclue2 | ||||
| glu | ||||
| gst-plugins-bad | ||||
| gst-plugins-base | ||||
| gst-plugins-good | ||||
| gst-plugins-ugly | ||||
| gstreamer | ||||
| harfbuzz | ||||
| hicolor-icon-theme | ||||
| libatasmart | ||||
| libbsd | ||||
| libdrm | ||||
| libevdev | ||||
| libinput | ||||
| libmbim | ||||
| libnice | ||||
| libqmi | ||||
| libvdpau | ||||
| libxcb | ||||
| libxft | ||||
| libxi | ||||
| media-player-info | ||||
| mesa | ||||
| modemmanager | ||||
| networkmanager | ||||
| orc | ||||
| p11-kit | ||||
| polkit | ||||
| poppler | ||||
| poppler-data | ||||
| pulseaudio | ||||
| pyxdg | ||||
| r | ||||
| sdl | ||||
| shared-mime-info | ||||
| sound-theme-freedesktop | ||||
| startup-notification | ||||
| systemdcompat | ||||
| telepathy-glib | ||||
| ttf-dejavu | ||||
| udisks2 | ||||
| upower | ||||
| wayland | ||||
| wayland-protocols | ||||
| webrtc-audio-processing | ||||
| xcb-proto | ||||
| xcb-util | ||||
| xcb-util-cursor | ||||
| xcb-util-image | ||||
| xcb-util-keysyms | ||||
| xcb-util-renderutil | ||||
| xcb-util-wm | ||||
| xdg-user-dirs | ||||
| xdg-utils | ||||
| @@ -1,63 +0,0 @@ | ||||
| adwaita-icon-theme | ||||
| atk | ||||
| at-spi2-atk | ||||
| at-spi2-core | ||||
| babl | ||||
| cantarell-fonts | ||||
| cogl | ||||
| dconf | ||||
| flatpak | ||||
| gamin | ||||
| gcab | ||||
| gconf | ||||
| gcr | ||||
| gdk-pixbuf2 | ||||
| gegl02 | ||||
| git | ||||
| glade | ||||
| glib2 | ||||
| glib-networking | ||||
| gnome-common | ||||
| gnome-keyring | ||||
| gobject-introspection | ||||
| gsettings-desktop-schemas | ||||
| gssdp | ||||
| gtk2 | ||||
| gtk3 | ||||
| gtk-doc | ||||
| gtksourceview3 | ||||
| gupnp | ||||
| gupnp-igd | ||||
| gvfs | ||||
| json-glib | ||||
| libcloudproviders | ||||
| libcroco | ||||
| libgee | ||||
| libglade | ||||
| libgnome-keyring | ||||
| libgudev | ||||
| libnotify | ||||
| librsvg | ||||
| libsecret | ||||
| libsoup | ||||
| libxml2 | ||||
| libxslt | ||||
| meld | ||||
| mobile-broadband-provider-info | ||||
| modemmanager | ||||
| networkmanager | ||||
| network-manager-applet | ||||
| orca | ||||
| ostree | ||||
| pango | ||||
| pyatspi | ||||
| pygobject | ||||
| pygobject2 | ||||
| pygtk | ||||
| rest | ||||
| ttf-bitstream-vera | ||||
| vala | ||||
| vte | ||||
| vte3 | ||||
| yelp-tools | ||||
| yelp-xsl | ||||
| @@ -1,4 +0,0 @@ | ||||
| phonon-gstreamer | ||||
| polkit-qt | ||||
| extra-cmake-modules | ||||
| phonon | ||||
| @@ -1,17 +0,0 @@ | ||||
| linux | ||||
| nvidia | ||||
| nvidia-utils | ||||
| acpi_call | ||||
| bbswitch | ||||
| broadcom-wl | ||||
| tp_smapi | ||||
| r8168 | ||||
| virtualbox-modules-artix | ||||
| linux-lts | ||||
| nvidia-lts | ||||
| acpi_call-lts | ||||
| bbswitch-lts | ||||
| broadcom-wl-lts | ||||
| tp_smapi-lts | ||||
| r8168-lts | ||||
| linux-firmware | ||||
| @@ -1,31 +0,0 @@ | ||||
| lxqt-about | ||||
| lxqt-admin | ||||
| lxqt-config | ||||
| lxqt-globalkeys | ||||
| lxqt-notificationd | ||||
| lxqt-openssh-askpass | ||||
| lxqt-panel | ||||
| lxqt-policykit | ||||
| lxqt-powermanagement | ||||
| lxqt-qtplugin | ||||
| lxqt-runner | ||||
| lxqt-session | ||||
| lxqt-sudo | ||||
| lxqt-themes | ||||
| lxqt-build-tools | ||||
|  | ||||
| compton-conf | ||||
| lximage-qt | ||||
| obconf-qt | ||||
| openbox | ||||
| pcmanfm-qt | ||||
| qterminal | ||||
| liblxqt | ||||
| libqtxdg | ||||
| lxmenu-data | ||||
| libfm-qt | ||||
| libfm | ||||
| qtermwidget | ||||
| libsysstat | ||||
| libstatgrab | ||||
| qps | ||||
| @@ -1,37 +0,0 @@ | ||||
| libdmx | ||||
| libfontenc | ||||
| libice | ||||
| libpciaccess | ||||
| libsm | ||||
| libx11 | ||||
| libxau | ||||
| libxaw | ||||
| libxcomposite | ||||
| libxcursor | ||||
| libxdamage | ||||
| libxdmcp | ||||
| libxext | ||||
| libxfixes | ||||
| libxfont2 | ||||
| libxi|libxft | ||||
| libxinerama | ||||
| libxkbfile | ||||
| libxkbui | ||||
| libxmu | ||||
| libxpm | ||||
| libxrandr | ||||
| libxrender | ||||
| libxres | ||||
| libxshmfence | ||||
| libxss | ||||
| libxt | ||||
| libxtst | ||||
| libxv | ||||
| libxvmc | ||||
| libxxf86vm | ||||
| pixman | ||||
| xbitmaps | ||||
| xkeyboard-config | ||||
| xorgproto | ||||
| xterm | ||||
| xtrans | ||||
| @@ -21,7 +21,7 @@ is_subvolume() { | ||||
| } | ||||
|  | ||||
| is_same_fs() { | ||||
|     [[ "$(stat -c %d "$1")" == "$(stat -c %d "$1")" ]] | ||||
|     [[ "$(stat -c %d "$1")" == "$(stat -c %d "$2")" ]] | ||||
| } | ||||
|  | ||||
| subvolume_delete_recursive() { | ||||
|   | ||||
| @@ -76,19 +76,23 @@ init_artools_pkg(){ | ||||
|  | ||||
|     [[ -z ${TREE_NAMES_ARTIX[@]} ]] && \ | ||||
|     TREE_NAMES_ARTIX=( | ||||
|         packages | ||||
|         community | ||||
|         packages-kernel | ||||
|         packages-openrc | ||||
|         packages-runit | ||||
|         packages-xorg | ||||
|         packages-python | ||||
|         packages-perl | ||||
|         packages-qt5 | ||||
|         packages-ruby | ||||
| #         packages-desktop | ||||
| #         packages-kde | ||||
| #         packages-gnome | ||||
|             packages | ||||
|             community | ||||
|             packages-kernel | ||||
|             packages-openrc | ||||
|             packages-runit | ||||
|             packages-xorg | ||||
|             packages-python | ||||
|             packages-perl | ||||
|             packages-qt5 | ||||
|             packages-devel | ||||
|             packages-ruby | ||||
|             packages-gtk | ||||
|             packages-gnome | ||||
|             packages-cinnamon | ||||
|             packages-lxqt | ||||
|             packages-mate | ||||
|             packages-kde | ||||
|     ) | ||||
|  | ||||
|     HOST_TREE_ARTIX=${HOST_TREE_ARTIX:-"gitea@${GIT_DOMAIN}:artixlinux"} | ||||
| @@ -102,6 +106,14 @@ init_artools_pkg(){ | ||||
|     CHROOTS_PKG="${CHROOTS_DIR}/buildpkg" | ||||
|  | ||||
|     REPOS_ROOT=${REPOS_ROOT:-"${WORKSPACE_DIR}/repos"} | ||||
|  | ||||
|     REPOS_MIRROR=${REPOS_MIRROR:-'http://mirror1.artixlinux.org/repos'} | ||||
|  | ||||
|     DBEXT=${DBEXT:-'xz'} | ||||
|  | ||||
|     LINKSDBEXT=${LINKSDBEXT:-"links.tar.${DBEXT}"} | ||||
|  | ||||
|     PKGDBEXT=${PKGDBEXT:-"db.tar.${DBEXT}"} | ||||
| } | ||||
|  | ||||
| init_artools_iso(){ | ||||
| @@ -167,6 +179,8 @@ load_user_info(){ | ||||
|  | ||||
|     USERCONFDIR="${XDG_CONFIG_HOME:-$USER_HOME/.config}" | ||||
|     prepare_dir "${USERCONFDIR}" | ||||
|  | ||||
|     USERCACHEDIR="${XDG_CACHE_HOME:-$USER_HOME/.cache}/artools" | ||||
| } | ||||
|  | ||||
| # orig_argv=("$0" "$@") | ||||
|   | ||||
| @@ -136,12 +136,24 @@ write_servicescfg_conf(){ | ||||
|     printf '%s' "${yaml}" | ||||
| } | ||||
|  | ||||
| write_unpackfs_conf(){ | ||||
|     local yaml=$(write_yaml_header) | ||||
|     yaml+=$(write_empty_line) | ||||
|     yaml+=$(write_yaml_map 0 'unpack') | ||||
|     yaml+=$(write_yaml_seq_map 2 'source' "/run/artix/bootmnt/artix/x86_64/rootfs.sfs") | ||||
|     yaml+=$(write_yaml_map 4 'sourcefs' 'squashfs') | ||||
|     yaml+=$(write_yaml_map 4 'destination' '') | ||||
|     yaml+=$(write_empty_line) | ||||
|     printf '%s' "${yaml}" | ||||
| } | ||||
|  | ||||
| configure_calamares(){ | ||||
|     local mods="$1/etc/calamares/modules" | ||||
|     if [[ -d "$mods" ]];then | ||||
|         msg2 "Configuring Calamares" | ||||
|         write_users_conf > "$mods"/users.conf | ||||
|         write_servicescfg_conf > "$mods"/services-"${INITSYS}".conf | ||||
|         [[ -z ${DESKTOP_LIST} ]] && write_unpackfs_conf > "$mods"/unpackfs.conf | ||||
|         sed -e "s|openrc|${INITSYS}|" -i "$mods"/postcfg.conf | ||||
|         sed -e "s|services-openrc|services-${INITSYS}|" -i "$1"/etc/calamares/settings.conf | ||||
|     fi | ||||
|   | ||||
| @@ -23,14 +23,12 @@ get_remote_head(){ | ||||
| get_pkg_org(){ | ||||
|     local pkg="$1" org= sub= | ||||
|     case ${pkg} in | ||||
|         ruby-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesRuby" ;; | ||||
|         perl-*) org=${pkg:0:6}; sub="${org:5}"; echo "packagesPerl" ;; | ||||
|         python-*) org=${pkg:0:8}; sub="${org:7}"; echo "packagesPython" ;; | ||||
|         python2-*) org=${pkg:0:9}; sub="${org:8}"; echo "packagesPython" ;; | ||||
|         lib32*) org=${pkg:0:7}; sub="${org:6}"; echo "packagesL" ;; #"packages${sub^^}" ;; | ||||
| #         lib*) org=${pkg:0:4}; sub="${org:3}"; echo "packagesLib${sub^^}" ;; | ||||
|         *) org=${pkg:0:1}; echo "packages${org^^}" ;; | ||||
|         ruby-*) org="packagesRuby" ;; | ||||
|         perl-*) org="packagesPerl" ;; | ||||
|         python-*|python2-*) org="packagesPython" ;; | ||||
|         *) sub=${pkg:0:1}; org="packages${sub^^}" ;; | ||||
|     esac | ||||
|     echo $org | ||||
| } | ||||
|  | ||||
| subrepo_push(){ | ||||
|   | ||||
| @@ -69,6 +69,25 @@ patch_pkg(){ | ||||
|     esac | ||||
| } | ||||
|  | ||||
| arch2artix(){ | ||||
|     local repo="$1" artix=none | ||||
|     case "$repo" in | ||||
|         core) artix=system ;; | ||||
|         extra) artix=world ;; | ||||
|         community) artix=galaxy ;; | ||||
|         multilib) artix=lib32 ;; | ||||
|         staging) artix=goblins ;; | ||||
|         testing) artix=gremlins ;; | ||||
|         community-staging) artix=galaxy-goblins ;; | ||||
|         community-testing) artix=galaxy-gremlins ;; | ||||
|         multilib-staging) artix=lib32-goblins ;; | ||||
|         multilib-testing) artix=lib32-gremlins ;; | ||||
|         kde-unstable) artix=kde-wobble ;; | ||||
|         gnome-unstable) artix=gnome-wobble ;; | ||||
|     esac | ||||
|     echo $artix | ||||
| } | ||||
|  | ||||
| find_tree(){ | ||||
|     local tree="$1" pkg="$2" | ||||
|     local result=$(find $tree -mindepth 2 -maxdepth 2 -type d -name "$pkg") | ||||
| @@ -76,22 +95,40 @@ find_tree(){ | ||||
|     echo ${result##*/} | ||||
| } | ||||
|  | ||||
| find_repo(){ | ||||
|     local pkg="$1" stag="$2" unst="$3" repo= | ||||
| arch_repos(){ | ||||
|     local stag="$1" unst="$2" | ||||
|     local repos=(core extra testing community community-testing multilib multilib-testing) | ||||
|  | ||||
|     $stag && repos+=(staging community-staging multilib-staging) | ||||
|     $unst && repos+=(gnome-unstable kde-unstable) | ||||
|  | ||||
|     for r in ${repos[@]};do | ||||
|     echo ${repos[@]} | ||||
| } | ||||
|  | ||||
| find_repo(){ | ||||
|     local pkg="$1" stag="$2" unst="$3" repo= | ||||
|  | ||||
|     for r in $(arch_repos "$stag" "$unst");do | ||||
|         [[ -f $pkg/repos/$r-x86_64/PKGBUILD ]] && repo=$r-x86_64 | ||||
|         [[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=$r-any | ||||
|     done | ||||
|     echo $repo | ||||
| } | ||||
|  | ||||
| is_valid_repo(){ | ||||
|     local src="$1" cases= | ||||
|     for r in $(arch_repos true true);do | ||||
|         cases=${cases:-}${cases:+|}${r} | ||||
|     done | ||||
|     eval "case $src in | ||||
|         ${cases}|trunk) return 0 ;; | ||||
|         *) return 1 ;; | ||||
|     esac" | ||||
| } | ||||
|  | ||||
| get_cases(){ | ||||
|     local pkglist="${DATADIR}/pkglists/$1.list" | ||||
|     local pkglist="${SYSCONFDIR}/pkglist.d/$1.list" | ||||
|  | ||||
|     local _space="s| ||g" _clean=':a;N;$!ba;s/\n/ /g' _com_rm="s|#.*||g" | ||||
|  | ||||
|     local pkgs=($(sed "$_com_rm" "$pkglist" | sed "$_space" | sed "$_clean")) | ||||
| @@ -107,28 +144,29 @@ get_artix_tree(){ | ||||
|     local pkg="$1" artix_tree="${2:-$3}" tree | ||||
|     eval "case $pkg in | ||||
|         $(get_cases kernel)) tree=packages-kernel ;; | ||||
|         python-*|python2-*) tree=packages-python ;; | ||||
|         perl-*) tree=packages-perl ;; | ||||
|         ruby-*) tree=packages-ruby ;; | ||||
|         xorg*|xf86*|$(get_cases xorg)) tree=packages-xorg ;; | ||||
|         *-openrc) tree=packages-openrc ;; | ||||
|         *-runit) tree=packages-runit ;; | ||||
|         qt5-*) tree=packages-qt5 ;; | ||||
|         lxqt*|$(get_cases lxqt)) tree=packages-lxqt ;; | ||||
|         $(get_cases python)) tree=packages-python ;; | ||||
|         $(get_cases perl)) tree=packages-perl ;; | ||||
|         $(get_cases ruby)) tree=packages-ruby ;; | ||||
|         $(get_cases openrc)) tree=packages-openrc ;; | ||||
|         $(get_cases runit)) tree=packages-runit ;; | ||||
|         $(get_cases xorg)) tree=packages-xorg ;; | ||||
|         $(get_cases qt5)) tree=packages-qt5 ;; | ||||
|         $(get_cases gtk)) tree=packages-gtk ;; | ||||
|         $(get_cases devel)) tree=packages-devel ;; | ||||
|         $(get_cases lxqt)) tree=packages-lxqt ;; | ||||
|         $(get_cases cinnamon)) tree=packages-cinnamon ;; | ||||
|         $(get_cases kde)) tree=packages-kde ;; | ||||
|         $(get_cases gnome)) tree=packages-gnome ;; | ||||
|         $(get_cases mate)) tree=packages-mate ;; | ||||
|         *) tree=$artix_tree | ||||
|     esac" | ||||
|     echo $tree | ||||
|  | ||||
| #         $(get_cases freedesktop)) tree=packages-desktop ;; | ||||
| #         $(get_cases kde)) tree=packages-kde ;; | ||||
| #         $(get_cases gnome)) tree=packages-gnome ;; | ||||
|      | ||||
| } | ||||
|  | ||||
| get_import_path(){ | ||||
|     local pkg="$1" import_path= | ||||
|     for tree in ${TREE_NAMES_ARCH[@]};do | ||||
|         [[ -d ${TREE_DIR_ARCH}/$tree/$pkg ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg | ||||
|         [[ -d ${TREE_DIR_ARCH}/$tree/$pkg/repos ]] && import_path=${TREE_DIR_ARCH}/$tree/$pkg | ||||
|     done | ||||
|     echo $import_path | ||||
| } | ||||
| @@ -143,14 +181,6 @@ pkgver_equal() { | ||||
|     fi | ||||
| } | ||||
|  | ||||
| is_valid_repo(){ | ||||
|     local src="$1" | ||||
|     case $src in | ||||
|         core|extra|community|multilib|testing|staging|community-testing|community-staging|multilib-testing|multilib-staging|trunk) return 0 ;; | ||||
|         *) return 1 ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| find_cached_package() { | ||||
|     local searchdirs=("$PKGDEST" "$PWD") results=() | ||||
|     local targetname=$1 targetver=$2 targetarch=$3 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user