forked from artix/artools
		
	Compare commits
	
		
			18 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b5fa7084b2 | |||
| 7eabdb0e46 | |||
| 10c013bf33 | |||
| 74618d77a5 | |||
| 196761740b | |||
| a814655956 | |||
| 7b03050ab9 | |||
| 0b1ff8d060 | |||
| f66761aa57 | |||
| f33d9bdac1 | |||
| f50c66cdd7 | |||
| fd1bc87ef0 | |||
| 9da1ae8e31 | |||
| 52ecf8d463 | |||
| 38fa79e10b | |||
| a53fb9e839 | |||
| 1d85f8000c | |||
| 21c44dba79 | 
							
								
								
									
										23
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| V=0.26 | ||||
| V=0.27 | ||||
|  | ||||
| TOOLS = artools | ||||
| PREFIX ?= /usr | ||||
| @@ -40,7 +40,9 @@ PKG_BIN = \ | ||||
| 	bin/pkg/batchpkg \ | ||||
| 	bin/pkg/signpkg \ | ||||
| 	bin/pkg/checkrepo \ | ||||
| 	bin/pkg/gitearepo | ||||
| 	bin/pkg/gitearepo \ | ||||
| 	bin/pkg/tidyarch \ | ||||
| 	bin/pkg/mkdepgraph | ||||
|  | ||||
| LN_COMMITPKG = \ | ||||
| 	extrapkg \ | ||||
| @@ -71,20 +73,6 @@ LN_BUILDPKG = \ | ||||
| 	buildpkg-kde-wobble \ | ||||
| 	buildpkg-gnome-wobble | ||||
|  | ||||
| LN_DEPLOYPKG = \ | ||||
| 	deploypkg-system \ | ||||
| 	deploypkg-world \ | ||||
| 	deploypkg-gremlins \ | ||||
| 	deploypkg-goblins \ | ||||
| 	deploypkg-galaxy \ | ||||
| 	deploypkg-galaxy-gremlins \ | ||||
| 	deploypkg-galaxy-goblins \ | ||||
| 	deploypkg-lib32 \ | ||||
| 	deploypkg-lib32-gremlins \ | ||||
| 	deploypkg-lib32-goblins \ | ||||
| 	deploypkg-kde-wobble \ | ||||
| 	deploypkg-gnome-wobble | ||||
|  | ||||
| PKG_DATA = \ | ||||
| 	data/pacman/makepkg.conf \ | ||||
| 	data/valid-names.conf | ||||
| @@ -155,9 +143,6 @@ install_pkg: | ||||
|  | ||||
| 	for l in $(LN_COMMITPKG); do $(LN) commitpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(LN_BUILDPKG); do $(LN) buildpkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
| 	for l in $(LN_DEPLOYPKG); do $(LN) deploypkg $(DESTDIR)$(BINDIR)/$$l; done | ||||
|  | ||||
| 	$(LN) artix-chroot $(DESTDIR)$(BINDIR)/artools-chroot | ||||
|  | ||||
| 	install $(DIRMODE) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
| 	install $(FILEMODE) $(PKG_DATA) $(DESTDIR)$(DATADIR)/$(TOOLS) | ||||
|   | ||||
| @@ -18,134 +18,34 @@ m4_include(lib/base/message.sh) | ||||
| m4_include(lib/base/chroot.sh) | ||||
| m4_include(lib/base/mount.sh) | ||||
|  | ||||
| #{{{ functions | ||||
|  | ||||
| chroot_part_mount() { | ||||
|     msg2 "mount: [%s]" "$2" | ||||
|     mount "$@" && CHROOT_ACTIVE_PART_MOUNTS=("$2" "${CHROOT_ACTIVE_PART_MOUNTS[@]}") | ||||
| } | ||||
|  | ||||
| chroot_part_umount() { | ||||
|     chroot_api_umount | ||||
|     msg2 "umount: [%s]" "${CHROOT_ACTIVE_PART_MOUNTS[@]}" | ||||
|     umount "${CHROOT_ACTIVE_PART_MOUNTS[@]}" | ||||
|     unset CHROOT_ACTIVE_PART_MOUNTS | ||||
| } | ||||
|  | ||||
| detect(){ | ||||
|     local detected | ||||
|     detected="$(os-prober | tr ' ' '_' | paste -s -d ' ')" | ||||
|     echo "${detected}" | ||||
| } | ||||
|  | ||||
| # $1: os-prober array | ||||
| get_os_name(){ | ||||
|     local str=$1 | ||||
|     str="${str#*:}" | ||||
|     str="${str#*:}" | ||||
|     str="${str%:*}" | ||||
|     echo "$str" | ||||
| } | ||||
|  | ||||
| mount_os(){ | ||||
|     CHROOT_ACTIVE_PART_MOUNTS=() | ||||
|     CHROOT_ACTIVE_MOUNTS=() | ||||
|  | ||||
|     trap_setup chroot_part_umount | ||||
|  | ||||
|     chroot_part_mount "$2" "$1" | ||||
|  | ||||
|     local mounts | ||||
|     mounts=$(perl -ane 'printf("%s:%s\n", @F[0,1]) if $F[0] =~ m#^UUID=#;' "$1"/etc/fstab) | ||||
|  | ||||
|     for entry in ${mounts}; do | ||||
|         entry=${entry//UUID=} | ||||
|         local dev=${entry%:*} mp=${entry#*:} | ||||
|         case "${entry#*:}" in | ||||
|             '/'|'swap'|'none') continue ;; | ||||
|             *) chroot_part_mount "/dev/disk/by-uuid/${dev}" "$1${mp}" ;; | ||||
|         esac | ||||
|     done | ||||
|  | ||||
|     chroot_setup "$1" true | ||||
|     chroot_add_resolv_conf "$1" | ||||
| } | ||||
|  | ||||
| select_os(){ | ||||
|     local os_list=( "$(detect)" ) count=${#os_list[@]} | ||||
|     if [[ ${count} -gt 1 ]];then | ||||
|         msg "Detected systems:" | ||||
|         local i=0 | ||||
|         for os in "${os_list[@]}"; do | ||||
|             local last=${os##*:} | ||||
|             case $last in | ||||
|                 'efi') count=$((count-1)) ;; | ||||
|                 *) msg2 "$i) $(get_os_name "$os")"; i=$((i+1)) ;; | ||||
|             esac | ||||
|         done | ||||
|         i=0 | ||||
|         msg "Select system to mount [0-%s] : " "$((count-1))" | ||||
|         read -r select | ||||
|     else | ||||
|         select=0 | ||||
|     fi | ||||
|     local os_str=${os_list[$select]} type | ||||
|     type=$os_str | ||||
|     root=${os_str%%:*} | ||||
|     type=${type##*:} | ||||
|     if [[ "${type##*:}" == 'linux' ]];then | ||||
|         msg "Mounting (%s) [%s]" "$(get_os_name "$os_str")" "$root" | ||||
|         mount_os "$1" "$root" | ||||
|     else | ||||
|         die "You can't mount %s!" "$select" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| #}}} | ||||
|  | ||||
| automount=false | ||||
|  | ||||
| usage() { | ||||
|     echo "usage: ${0##*/} -a [or] ${0##*/} chroot-dir [command]" | ||||
|     echo '    -a             Automount detected linux system' | ||||
|     echo '    -h             Print this help message' | ||||
|     echo '' | ||||
|     echo "    If 'command' is unspecified, ${0##*/} will launch /bin/sh." | ||||
|     echo '' | ||||
|     echo "    If 'automount' is true, ${0##*/} will launch /bin/bash" | ||||
|     echo "    and ${chrootdir}." | ||||
|     echo '' | ||||
|     echo '' | ||||
|     printf 'usage: %s chroot-dir [command]\n' "${0##*/}" | ||||
|     printf '    -h             Print this help message\n' | ||||
|     printf '\n' | ||||
|     printf "    If 'command' is unspecified, %s will launch /bin/sh.\n" "${0##*/}" | ||||
|     printf '\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| opts=':ha' | ||||
| opts=':h' | ||||
|  | ||||
| while getopts ${opts} arg; do | ||||
|     case "${arg}" in | ||||
|         a) automount=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument ${arg}"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
| shift $(( OPTIND - 1 )) | ||||
|  | ||||
| check_root | ||||
|  | ||||
| if ${automount};then | ||||
|     chrootdir=/mnt | ||||
|     run_args=(/bin/bash) | ||||
|  | ||||
|     select_os "${chrootdir}" | ||||
| else | ||||
| chrootdir=$1 | ||||
| shift | ||||
|     run_args=("$@") | ||||
|  | ||||
| [[ -d ${chrootdir} ]] || die "Can't create chroot on non-directory %s" "${chrootdir}" | ||||
|  | ||||
| chroot_api_mount "${chrootdir}" || die "failed to setup API filesystems in chroot %s" "${chrootdir}" | ||||
| chroot_add_resolv_conf "${chrootdir}" | ||||
| fi | ||||
|  | ||||
| SHELL=/bin/sh unshare --fork --pid chroot "${chrootdir}" "${run_args[@]}" | ||||
| SHELL=/bin/sh unshare --fork --pid chroot "${chrootdir}" "$@" | ||||
|   | ||||
| @@ -55,19 +55,19 @@ copymirrorlist=1 | ||||
| pacmode=-Sy | ||||
|  | ||||
| usage() { | ||||
|     echo "usage: ${0##*/} [options] root [packages...]" | ||||
|     echo " -C <config>      Use an alternate config file for pacman" | ||||
|     echo " -c               Use the package cache on the host, rather than the target" | ||||
|     echo " -G               Avoid copying the host's pacman keyring to the target" | ||||
|     echo " -i               Avoid auto-confirmation of package selections" | ||||
|     echo " -M               Avoid copying the host's mirrorlist to the target" | ||||
|     echo ' -U               Use pacman -U to install packages' | ||||
|     echo " -h               Print this help message" | ||||
|     echo '' | ||||
|     echo ' basestrap installs packages to the specified new root directory.' | ||||
|     echo ' If no packages are given, basestrap defaults to the "base" group.' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     printf "usage: %s [options] root [packages...]\n" "${0##*/}" | ||||
|     printf " -C <config>      Use an alternate config file for pacman\n" | ||||
|     printf " -c               Use the package cache on the host, rather than the target\n" | ||||
|     printf " -G               Avoid copying the host's pacman keyring to the target\n" | ||||
|     printf " -i               Avoid auto-confirmation of package selections\n" | ||||
|     printf " -M               Avoid copying the host's mirrorlist to the target\n" | ||||
|     printf ' -U               Use pacman -U to install packages\n' | ||||
|     printf " -h               Print this help message\n" | ||||
|     printf '\n' | ||||
|     printf ' basestrap installs packages to the specified new root directory.\n' | ||||
|     printf ' If no packages are given, basestrap defaults to the "base" group.\n' | ||||
|     printf '\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| @@ -81,8 +81,7 @@ while getopts ${opts} arg; do | ||||
|         G) copykeyring=0 ;; | ||||
|         M) copymirrorlist=0 ;; | ||||
|         U) pacmode=-U ;; | ||||
|         :) echo "invalid argument ${arg}:$OPTARG"; usage 1;; | ||||
|         ?) usage 0 ;; | ||||
|         h|?) usage 0 ;; | ||||
|     esac | ||||
| done | ||||
| shift $(( OPTIND - 1 )) | ||||
|   | ||||
| @@ -45,18 +45,18 @@ files=() | ||||
| mount_args=("-B:/etc/hosts:/etc/hosts") | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] working-dir [run arguments]" | ||||
|     echo "A wrapper around chroot. Provides support for pacman." | ||||
|     echo | ||||
|     echo ' options:' | ||||
|     echo '    -C <file>     Location of a pacman config file' | ||||
|     echo '    -M <file>     Location of a makepkg config file' | ||||
|     echo '    -c <dir>      Set pacman cache' | ||||
|     echo '    -f <file>     Copy file from the host to the chroot' | ||||
|     echo '    -s            Do not run setarch' | ||||
|     echo '    -b <list>     Bind mountargs' | ||||
|     echo '                  List format [mntarg1:src1:dest1 ... mntargN:srcN:destN]' | ||||
|     echo '    -h            This message' | ||||
|     printf "Usage: %s [options] working-dir [run arguments]\n" "${0##*/}" | ||||
|     printf "A wrapper around chroot. Provides support for pacman.\n" | ||||
|     printf '\n' | ||||
|     printf ' options:\n' | ||||
|     printf '    -C <file>     Location of a pacman config file\n' | ||||
|     printf '    -M <file>     Location of a makepkg config file\n' | ||||
|     printf '    -c <dir>      Set pacman cache\n' | ||||
|     printf '    -f <file>     Copy file from the host to the chroot\n' | ||||
|     printf '    -s            Do not run setarch\n' | ||||
|     printf '    -b <list>     Bind mountargs\n' | ||||
|     printf '                  List format [mntarg1:src1:dest1 ... mntargN:srcN:destN]\n' | ||||
|     printf '    -h            This message\n' | ||||
|     exit 1 | ||||
| } | ||||
|  | ||||
| @@ -71,7 +71,6 @@ while getopts ${opts} arg; do | ||||
|         s) nosetarch=1 ;; | ||||
|         b) bindmounts+=("$OPTARG"); mount_args+=(${bindmounts[@]}) ;; | ||||
|         h|?) usage ;; | ||||
|         *) error "invalid argument '$arg'"; usage ;; | ||||
|     esac | ||||
| done | ||||
| shift $(( OPTIND - 1 )) | ||||
| @@ -95,7 +94,7 @@ host_mirrors=($(pacman-conf --repo world Server 2> /dev/null | sed -r 's#(.*/)wo | ||||
| for host_mirror in "${host_mirrors[@]}"; do | ||||
|     if [[ $host_mirror == *file://* ]]; then | ||||
|         # shellcheck disable=2016 | ||||
|         host_mirror=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g') | ||||
|         host_mirror=$(printf "%s\n" "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g') | ||||
|         in_array "$host_mirror" "${cache_dirs[@]}" || cache_dirs+=("$host_mirror") | ||||
|     fi | ||||
| done | ||||
|   | ||||
| @@ -23,15 +23,15 @@ files=() | ||||
| chroot_args=() | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] working-dir package-list..." | ||||
|     echo ' options:' | ||||
|     echo '    -U            Use pacman -U to install packages' | ||||
|     echo '    -C <file>     Location of a pacman config file' | ||||
|     echo '    -M <file>     Location of a makepkg config file' | ||||
|     echo '    -c <dir>      Set pacman cache' | ||||
|     echo '    -f <file>     Copy file from the host to the chroot' | ||||
|     echo '    -s            Do not run setarch' | ||||
|     echo '    -h            This message' | ||||
|     printf "Usage: %s [options] working-dir package-list...\n" "${0##*/}" | ||||
|     printf ' options:\n' | ||||
|     printf '    -U            Use pacman -U to install packages\n' | ||||
|     printf '    -C <file>     Location of a pacman config file\n' | ||||
|     printf '    -M <file>     Location of a makepkg config file\n' | ||||
|     printf '    -c <dir>      Set pacman cache\n' | ||||
|     printf '    -f <file>     Copy file from the host to the chroot\n' | ||||
|     printf '    -s            Do not run setarch\n' | ||||
|     printf '    -h            This message\n' | ||||
|     exit 1 | ||||
| } | ||||
|  | ||||
| @@ -46,7 +46,6 @@ while getopts ${opts} arg; do | ||||
|         f) files+=("$OPTARG") ;; | ||||
|         s) nosetarch=1 ;; | ||||
|         h|?) usage ;; | ||||
|         *) error "invalid argument '%s'" "$arg"; usage ;; | ||||
|     esac | ||||
|     if [[ $arg != U ]]; then | ||||
|         chroot_args+=("-$arg") | ||||
| @@ -95,9 +94,9 @@ basestrap -${umode}Mc ${pacman_conf:+-C "$pacman_conf"} "$working_dir" \ | ||||
|     "${cache_dirs[@]/#/--cachedir=}" "$@" || die 'Failed to install all packages' | ||||
|  | ||||
| printf '%s.UTF-8 UTF-8\n' en_US de_DE > "$working_dir/etc/locale.gen" | ||||
| echo 'LANG=en_US.UTF-8' > "$working_dir/etc/locale.conf" | ||||
| # echo 'KEYMAP=en' > "$working_dir/etc/vconsole.conf" | ||||
| echo "${CHROOTVERSION}" > "$working_dir/.artools" | ||||
| printf 'LANG=en_US.UTF-8\n' > "$working_dir/etc/locale.conf" | ||||
| # printf 'KEYMAP=en\n' > "$working_dir/etc/vconsole.conf" | ||||
| printf "%s\n" "${CHROOTVERSION}" > "$working_dir/.artools" | ||||
|  | ||||
| dbus-uuidgen --ensure="$working_dir"/etc/machine-id | ||||
|  | ||||
|   | ||||
| @@ -181,7 +181,7 @@ gen_iso_fn(){ | ||||
|     for n in "${vars[@]}"; do | ||||
|         name=${name:-}${name:+-}${n} | ||||
|     done | ||||
|     echo "$name" | ||||
|     printf "%s\n" "$name" | ||||
| } | ||||
|  | ||||
| prepare_build(){ | ||||
| @@ -325,28 +325,28 @@ chroots_iso="${CHROOTS_DIR}/buildiso" | ||||
| arch=$(uname -m) | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${cmd} [options]" | ||||
|     echo "    -p <profile>       Profile [default: ${profile}]" | ||||
|     echo '    -r <dir>           Chroots directory' | ||||
|     echo "                       [default: ${chroots_iso}]" | ||||
|     echo '    -t <dir>           Target directory' | ||||
|     echo "                       [default: ${ISO_POOL}]" | ||||
|     echo '    -i <name>          Init system to use' | ||||
|     echo "                       [default: ${INITSYS}]" | ||||
|     echo '    -g <key>           The gpg key for img signing' | ||||
|     echo "                       [default: none]" | ||||
|     echo '    -m                 Set SquashFS image mode to persistence' | ||||
|     echo '    -c                 Disable clean work dir' | ||||
|     echo '    -x                 Build chroot only' | ||||
|     echo '    -s                 Squash chroot only' | ||||
|     echo '    -b                 Generate iso boot only' | ||||
|     echo '    -z                 Generate iso only' | ||||
|     echo '                       Requires pre built images (-x)' | ||||
|     echo '    -d                 Use dracut instead of mkinitcpio for iso initramfs' | ||||
|     echo '    -q                 Query settings and pretend build' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     printf 'Usage: %s [options]\n' "${cmd}" | ||||
|     printf '    -p <profile>       Profile [default: %s]\n' "${profile}" | ||||
|     printf '    -r <dir>           Chroots directory\n' | ||||
|     printf '                       [default: %s]\n' "${chroots_iso}" | ||||
|     printf '    -t <dir>           Target directory\n' | ||||
|     printf '                       [default: %s]\n' "${ISO_POOL}" | ||||
|     printf '    -i <name>          Init system to use\n' | ||||
|     printf '                       [default: %s]\n' "${INITSYS}" | ||||
|     printf '    -g <key>           The gpg key for img signing\n' | ||||
|     printf '                       [default: none]\n' | ||||
|     printf '    -m                 Set SquashFS image mode to persistence\n' | ||||
|     printf '    -c                 Disable clean work dir\n' | ||||
|     printf '    -x                 Build chroot only\n' | ||||
|     printf '    -s                 Squash chroot only\n' | ||||
|     printf '    -b                 Generate iso boot only\n' | ||||
|     printf '    -z                 Generate iso only\n' | ||||
|     printf '                       Requires pre built images (-x)\n' | ||||
|     printf '    -d                 Use dracut instead of mkinitcpio for iso initramfs\n' | ||||
|     printf '    -q                 Query settings and pretend build\n' | ||||
|     printf '    -h                 This help\n' | ||||
|     printf '\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| @@ -368,7 +368,6 @@ while getopts "${opts}" arg; do | ||||
|         d) use_dracut=true ;; | ||||
|         q) pretend=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|   | ||||
| @@ -76,13 +76,13 @@ batch_update() { | ||||
| #}}} | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [optional listname]" | ||||
|     echo '    -r                 Run generated commands' | ||||
|     echo '    -c                 Create subrepos from list' | ||||
|     echo '    -u                 Update subrepos from list' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     printf 'Usage: %s [optional listname]\n' "${0##*/}" | ||||
|     printf '    -r                 Run generated commands\n' | ||||
|     printf '    -c                 Create subrepos from list\n' | ||||
|     printf '    -u                 Update subrepos from list\n' | ||||
|     printf '    -h                 This help\n' | ||||
|     printf '\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| @@ -98,7 +98,6 @@ while getopts "${opts}" arg; do | ||||
|         c) create=true ;; | ||||
|         u) update=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|   | ||||
| @@ -29,17 +29,17 @@ chroots_pkg="${CHROOTS_DIR}/buildpkg" | ||||
| arch=$(uname -m) | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] -- [mkchrootpkg_args]" | ||||
|     echo "    -r <dir>           Create chroots in this directory" | ||||
|     echo "    -d <dir>           Destination repo chroot" | ||||
|     echo '    -c                 Recreate the chroot before building' | ||||
|     echo '    -m                 Major rebuild' | ||||
|     echo '    -N                 Disable check() function' | ||||
|     echo '    -C                 Run checkpkg after built' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
|     echo "Default mkchrootpkg_args args: ${mkchrootpkg_args[*]}" | ||||
|     echo '' | ||||
|     printf 'Usage: %s [options] -- [mkchrootpkg_args]\n' "${0##*/}" | ||||
|     printf '    -r <dir>           Create chroots in this directory\n' | ||||
|     printf '    -d <dir>           Destination repo chroot\n' | ||||
|     printf '    -c                 Recreate the chroot before building\n' | ||||
|     printf '    -m                 Major rebuild\n' | ||||
|     printf '    -N                 Disable check() function\n' | ||||
|     printf '    -C                 Run checkpkg after built\n' | ||||
|     printf '    -h                 This help\n' | ||||
|     printf '\n' | ||||
|     printf 'Default mkchrootpkg_args args: %s\n' "${mkchrootpkg_args[*]}" | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| @@ -54,7 +54,6 @@ while getopts "${opts}" arg; do | ||||
|         C) mkchrootpkg_args+=(-C) ;; | ||||
|         N) mkchrootpkg_args+=(-N) ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '%s'" "${arg}"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|   | ||||
| @@ -23,15 +23,6 @@ m4_include(lib/pkg/jenkins.sh) | ||||
|  | ||||
| #{{{ new git repo | ||||
|  | ||||
| subrepo_clone(){ | ||||
|     local pkg="$1" | ||||
|     local org="$2" | ||||
|     local name="$3" | ||||
|  | ||||
|     msg2 "Subrepo clone [%s] from (%s)" "$pkg" "$org/$name" | ||||
|     git subrepo clone "${GIT_SSH}":"$org"/"$name".git "$pkg" | ||||
| } | ||||
|  | ||||
| subrepo_new(){ | ||||
|     cd "${TREE_DIR_ARTIX}/${group}" || return | ||||
|  | ||||
| @@ -43,9 +34,10 @@ subrepo_new(){ | ||||
|  | ||||
|     add_team_to_repo "$gitname" "$org" "${team}" | ||||
|  | ||||
|     subrepo_clone "${package}" "$org" "$gitname" | ||||
|     msg2 "Subrepo clone [%s] from (%s)" "${package}" "$org/$gitname" | ||||
|     git subrepo clone "${GIT_SSH}":"$org/$gitname".git "${package}" | ||||
|  | ||||
|     mkdir -p "${TREE_DIR_ARTIX}/${group}/${package}/trunk" | ||||
|     prepare_dir "${TREE_DIR_ARTIX}/${group}/${package}/trunk" | ||||
|  | ||||
|     commit_jenkins_files "${package}" | ||||
| } | ||||
| @@ -54,30 +46,15 @@ subrepo_new(){ | ||||
|  | ||||
| #{{{ pull | ||||
|  | ||||
| clone_tree(){ | ||||
|     local url="$1" tree="$2" os="${3:-Artix}" | ||||
|  | ||||
|     msg "Cloning %s (%s) ..." "$tree" "$os" | ||||
|  | ||||
|     git clone "$url/$tree".git | ||||
| } | ||||
|  | ||||
| pull_tree_arch(){ | ||||
|     cd "${TREE_DIR_ARCH}" || return | ||||
|     for tree in "${ARCH_TREE[@]}";do | ||||
|         if [[ -d "${tree}" ]];then | ||||
|             ( cd "${tree}" || return | ||||
|                 pull_tree "${tree}" "$(get_local_head)" "Arch" | ||||
|             ) | ||||
|         else | ||||
|             clone_tree "${HOST_TREE_ARCH}" "${tree}" "Arch" | ||||
|         fi | ||||
|     done | ||||
| } | ||||
|  | ||||
| config_tree() { | ||||
|     local tree="$1" | ||||
|     cd "$tree" || return | ||||
|     local dist="$1" vars="${2:-false}" | ||||
|     case "$dist" in | ||||
|         Artix) | ||||
|             if "$vars"; then | ||||
|                 dist_tree=("${ARTIX_TREE[@]}") | ||||
|                 dist_url="${GIT_SSH}:artixlinux" | ||||
|                 dist_dir=${TREE_DIR_ARTIX} | ||||
|             else | ||||
|                 git config --bool pull.rebase true | ||||
|                 git config commit.gpgsign true | ||||
|                 if [[ -n "${GPGKEY}" ]];then | ||||
| @@ -85,26 +62,38 @@ config_tree(){ | ||||
|                 else | ||||
|                     warning "No GPGKEY configured in makepkg.conf!" | ||||
|                 fi | ||||
|     cd .. | ||||
|             fi | ||||
|         ;; | ||||
|         Arch) | ||||
|             if "$vars"; then | ||||
|                 dist_tree=("${ARCH_TREE[@]}") | ||||
|                 dist_url="${HOST_TREE_ARCH}" | ||||
|                 dist_dir=${TREE_DIR_ARCH} | ||||
|             else | ||||
|                 git config --bool pull.rebase false | ||||
|                 git config branch.master.mergeoptions --no-edit | ||||
|             fi | ||||
|         ;; | ||||
|     esac | ||||
| } | ||||
|  | ||||
| pull_tree_artix(){ | ||||
|     local repos=() | ||||
|     if ${sync_group}; then | ||||
|         repos=("${group}") | ||||
|     else | ||||
|         repos=("${ARTIX_TREE[@]}") | ||||
|     fi | ||||
|     cd "${TREE_DIR_ARTIX}" || return | ||||
|     for tree in "${repos[@]}"; do | ||||
|         if [[ -d "${tree}" ]];then | ||||
|             config_tree "${tree}" | ||||
|             ( cd "${tree}" || return | ||||
|                 pull_tree "${tree}" "$(get_local_head)" | ||||
| update_tree() { | ||||
|     local dist="${1:-Artix}" | ||||
|     config_tree "$dist" true | ||||
|     cd "$dist_dir" || return | ||||
|     for tree in "${dist_tree[@]}"; do | ||||
|         if [[ -d "$tree" ]]; then | ||||
|             ( cd "$tree" || return | ||||
|                 config_tree "$dist" | ||||
|                 msg "Checking (%s) (%s)" "$tree" "$dist" | ||||
|                 pull_tree "$tree" "$(get_local_head)" | ||||
|             ) | ||||
|         else | ||||
|             clone_tree "${host_tree_artix}" "${tree}" | ||||
|             config_tree "${tree}" | ||||
|             msg "Cloning (%s) (%s) ..." "$tree" "$dist" | ||||
|             git clone "$dist_url/$tree".git | ||||
|             ( cd "$tree" || return | ||||
|                 config_tree "$dist" | ||||
|             ) | ||||
|         fi | ||||
|     done | ||||
| } | ||||
| @@ -199,9 +188,9 @@ from_arch(){ | ||||
|     [[ -z $srcpath ]] && die "Package '%s' does not exist!" "${package}" | ||||
|  | ||||
|     repo=$(find_repo "$srcpath") | ||||
|     msg "repo: %s" "${repo#*/}" | ||||
|     msg "repo: %s" "$repo" | ||||
|  | ||||
|     archpath=$srcpath/$repo | ||||
|     archpath=$srcpath/repos/$repo | ||||
|     artixpath=$(find_pkg "${TREE_DIR_ARTIX}" "${package}") | ||||
|  | ||||
|     show_deps "$archpath" | ||||
| @@ -225,7 +214,7 @@ view_build(){ | ||||
|     archpath=$(find_pkg "${TREE_DIR_ARCH}" "${package}") | ||||
|     [[ -z $archpath ]] && die "Package '%s' does not exist!" "${package}" | ||||
|     repo=$(find_repo "${archpath}") | ||||
|     archpath=$archpath/$repo | ||||
|     archpath=$archpath/repos/$repo | ||||
|     msg "repo: %s" "${repo#*/}" | ||||
|     show_deps "$archpath" | ||||
| } | ||||
| @@ -243,8 +232,8 @@ check_tree(){ | ||||
| } | ||||
|  | ||||
| sync_repos(){ | ||||
|     ${sync_arch} && pull_tree_arch | ||||
|     ${sync_artix} && pull_tree_artix | ||||
|     ${sync_arch} && update_tree "Arch" | ||||
|     ${sync_artix} && update_tree | ||||
| } | ||||
|  | ||||
| load_makepkg_config | ||||
| @@ -261,7 +250,6 @@ sync_artix=true | ||||
| import=false | ||||
| view=false | ||||
| createnew=false | ||||
| sync_group=false | ||||
| check=false | ||||
|  | ||||
| package='' | ||||
| @@ -269,29 +257,27 @@ package='' | ||||
| team='community' | ||||
| group="${ARTIX_TREE[0]}" | ||||
|  | ||||
| host_tree_artix="${GIT_SSH}:artixlinux" | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo '    -p <pkg>      Package name' | ||||
|     echo '    -t <team>     Team name (only with -n)' | ||||
|     echo '                  Possible values: core,extra,community,multilib' | ||||
|     echo "                  [default: ${team}]" | ||||
|     echo '    -g <group>    Group name, the superrepo (only with -n or -s)' | ||||
|     echo "                  [default: ${group}]" | ||||
|     echo "    -s            Clone or pull repos" | ||||
|     echo "    -a            Don't clone or pull arch repos" | ||||
|     echo "    -b            Don't clone or pull artix repos" | ||||
|     echo '    -i            Import a package from arch repos' | ||||
|     echo '    -n            New remote subrepo and clone it' | ||||
|     echo '    -v            Check if a package is in the artix tree(s)' | ||||
|     echo '    -c            View package depends' | ||||
|     echo '    -x            Exclude testing (only with -i)' | ||||
|     echo '    -y            Exclude staging (only with -i)' | ||||
|     echo '    -z            Include kde & gnome unstable (only with -i)' | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     printf "Usage: %s [options]\n" "${0##*/}" | ||||
|     printf '    -p <pkg>      Package name\n' | ||||
|     printf '    -t <team>     Team name (only with -n)\n' | ||||
|     printf '                  Possible values: core,extra,community,multilib\n' | ||||
|     printf "                  [default: %s]\n" "${team}" | ||||
|     printf '    -g <group>    Group name, the superrepo (only with -n)\n' | ||||
|     printf "                  [default: %s]\n" "${group}" | ||||
|     printf "    -s            Clone or pull repos\n" | ||||
|     printf "    -a            Don't clone or pull arch repos\n" | ||||
|     printf "    -b            Don't clone or pull artix repos\n" | ||||
|     printf '    -i            Import a package from arch repos\n' | ||||
|     printf '    -n            New remote subrepo and clone it\n' | ||||
|     printf '    -v            Check if a package is in the artix tree(s)\n' | ||||
|     printf '    -c            View package depends\n' | ||||
|     printf '    -x            Exclude testing (only with -i)\n' | ||||
|     printf '    -y            Exclude staging (only with -i)\n' | ||||
|     printf '    -z            Include kde & gnome unstable (only with -i)\n' | ||||
|     printf '    -h            This help\n' | ||||
|     printf '\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| @@ -301,7 +287,7 @@ while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         p) package="$OPTARG" ;; | ||||
|         t) team="$OPTARG" ;; | ||||
|         g) group="$OPTARG"; sync_group=true ;; | ||||
|         g) group="$OPTARG" ;; | ||||
|         s) sync=true ;; | ||||
|         a) sync_arch=false ;; | ||||
|         b) sync_artix=false ;; | ||||
| @@ -313,7 +299,6 @@ while getopts "${opts}" arg; do | ||||
|         y) staging=false ;; | ||||
|         z) unstable=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|   | ||||
| @@ -197,7 +197,7 @@ for _pkgname in "${pkgname[@]}"; do | ||||
|     if ! diff_output="$(sdiff -s "$TEMPDIR/libraries-$_pkgname-old" "$TEMPDIR/libraries-$_pkgname")"; then | ||||
|         message="Sonames differ in $_pkgname!" | ||||
|         (( WARN )) && warning "$message" || msg "$message" | ||||
|         echo "$diff_output" | ||||
|         printf "%s\n" "$diff_output" | ||||
|     else | ||||
|         msg "No soname differences for %s." "$_pkgname" | ||||
|     fi | ||||
|   | ||||
| @@ -129,14 +129,14 @@ show_obsolete_table() { | ||||
|  | ||||
|         if [[ "$p" != *openrc* ]] && [[ "$p" != *runit* ]] \ | ||||
|         && [[ "$p" != *s6* ]] && [[ "$p" != *suite66* ]] \ | ||||
|         && [[ "$p" != *eudev* ]] && [[ "$p" != *elogind* ]] \ | ||||
|         && [[ "$p" != *udev* ]] && [[ "$p" != *elogind* ]] \ | ||||
|         && [[ "$p" != *sysusers* ]] && [[ "$p" != *tmpfiles* ]] \ | ||||
|         && [[ "$p" != *execline* ]] && [[ "$p" != *skalibs* ]] \ | ||||
|         && [[ "$p" != *netifrc* ]] && [[ "$p" != *bootlogd* ]] \ | ||||
|         && [[ "$p" != *pam_rundir* ]] && [[ "$p" != *artools* ]] \ | ||||
|         && [[ "$p" != *archlinux* ]] && [[ "$p" != *iso-profiles* ]] \ | ||||
|         && [[ "$p" != *calamares* ]] && [[ "$p" != *iso-initcpio* ]] \ | ||||
|         && [[ "$p" != *dinit* ]] && [[ "$p" != *artix* ]]; then | ||||
|         && [[ "$p" != *dinit* ]] && [[ "$p" != *artix* ]] && [[ "$p" != *blocaled* ]]; then | ||||
|             if [[ ! -d "${arch_db}/$p" ]]; then | ||||
|                 msg_row "${tableQ}" "${artix_repo}" "$p" "true" | ||||
|             fi | ||||
| @@ -209,17 +209,17 @@ searchrepos=( | ||||
| #}}} | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] (with -q [libname])" | ||||
|     echo '    -r <repo>     Repo name to query' | ||||
|     echo '                  [default: all]' | ||||
|     echo "    -s            Sync repo databases" | ||||
|     echo '    -c            Check repos' | ||||
|     echo '    -a            Show repo db (-c)' | ||||
|     echo '    -o            Check for obsolete packages' | ||||
|     echo "    -q            Query repo databases for so libs" | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     printf "Usage: %s [options] (with -q [libname])\n" "${0##*/}" | ||||
|     printf '    -r <repo>     Repo name to query\n' | ||||
|     printf '                  [default: all]\n' | ||||
|     printf "    -s            Sync repo databases\n" | ||||
|     printf '    -c            Check repos\n' | ||||
|     printf '    -a            Show repo db (-c)\n' | ||||
|     printf '    -o            Check for obsolete packages\n' | ||||
|     printf "    -q            Query repo databases for so libs\n" | ||||
|     printf '    -h            This help\n' | ||||
|     printf '\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| @@ -234,7 +234,6 @@ while getopts "${opts}" arg; do | ||||
|         q) query=true ;; | ||||
|         o) obsolete=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|   | ||||
| @@ -82,11 +82,11 @@ path_config() { | ||||
| } | ||||
|  | ||||
| get_repo_commit_msg() { | ||||
|     echo "[${repo_src}] -> [${repo_dest}] '${package}-$(get_full_version)' ${action}" | ||||
|     printf "[%s] -> [%s] '%s' %s\n" "${repo_src}" "${repo_dest}" "${package}-$(get_full_version)" "${action}" | ||||
| } | ||||
|  | ||||
| get_commit_msg() { | ||||
|     echo "[${repo_src}] '${package}-$(get_full_version)' ${action}" | ||||
|     printf "[%s] '%s' %s\n" "${repo_src}" "${package}-$(get_full_version)" "${action}" | ||||
| } | ||||
|  | ||||
| commit_pkg() { | ||||
| @@ -154,8 +154,11 @@ run(){ | ||||
|  | ||||
|         cd "${group}" || return | ||||
|  | ||||
|         ${push} && pull_tree "${group##*/}" "$head" | ||||
| #         subrepo_pull "${package}" | ||||
|         if ${push}; then | ||||
|             msg "Checking (%s) (Artix)" "${group##*/}" | ||||
|             pull_tree "${group##*/}" "$head" | ||||
|         fi | ||||
|  | ||||
|         subrepo_push "${package}" | ||||
|         subrepo_clean "${package}" | ||||
|  | ||||
| @@ -197,14 +200,14 @@ cmd=${0##*/} | ||||
| repo_dest=${cmd%pkg} | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo "    -s <name>          Source repository [default:${repo_src}]" | ||||
|     echo '    -p <pkg>           Package name' | ||||
|     echo '    -r                 Delete from repo (commitpkg only)' | ||||
|     echo '    -u                 Push' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     printf "Usage: %s [options]\n" "${0##*/}" | ||||
|     printf "    -s <name>          Source repository [default: %s]\n" "${repo_src}" | ||||
|     printf '    -p <pkg>           Package name\n' | ||||
|     printf '    -r                 Delete from repo (commitpkg only)\n' | ||||
|     printf '    -u                 Push\n' | ||||
|     printf '    -h                 This help\n' | ||||
|     printf '\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| @@ -217,7 +220,6 @@ while getopts "${opts}" arg; do | ||||
|         r) remove=true ;; | ||||
|         u) push=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|   | ||||
| @@ -31,23 +31,32 @@ write_list(){ | ||||
|     printf "%s\n" "$line" >> "${TREE_DIR_ARTIX}"/"$name".list | ||||
| } | ||||
|  | ||||
| get_group() { | ||||
|     local group | ||||
|     group="${artixpath%/*}" | ||||
|     group=${group##*/} | ||||
|     printf "%s\n" "${group#*-}" | ||||
| } | ||||
|  | ||||
| compare_m(){ | ||||
|     case ${artixrepo} in | ||||
| #     if [ "$result" -eq 0 ];then | ||||
|         case "$artixrepo" in | ||||
|             *testing*|*staging*|*rebuild) | ||||
|             if [[ "${a}" == "${b}" ]]; then | ||||
|                 msg_row "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}" | ||||
|             elif [[ "${a}" == 'staging' && "${b}" == 'rebuild' ]]; then | ||||
|                 msg_row_yellow "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}" | ||||
|                 if [[ "${archrepo}" == "${artixrepo}" ]]; then | ||||
|                     msg_row "${table}" "${archrepo}" "${artixrepo}" "$pkg" "$archver" "$artixver" "$(get_group)" | ||||
|                 elif [[ "${archrepo}" == 'staging' && "${artixrepo}" == 'rebuild' ]]; then | ||||
|                     msg_row_yellow "${table}" "${archrepo}" "${artixrepo}" "$pkg" "$archver" "$artixver" "$(get_group)" | ||||
|                 else | ||||
|                 msg_row_green "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}" | ||||
|                 if [[ -n "$archrepo" ]]; then | ||||
|                     write_list "${a}:${b}:$pkg" pkg_moves | ||||
|                     msg_row_green "${table}" "${archrepo}" "${artixrepo}" "$pkg" "$archver" "$artixver" "$(get_group)" | ||||
|                     if [[ -n "${archrepo}" ]]; then | ||||
|                         write_list "${archrepo}:${artixrepo}:$pkg" pkg_moves | ||||
|                     else | ||||
|                     write_list "@repo@:${b}:$pkg" artix | ||||
|                         write_list "@repo@:${artixrepo}:$pkg" artix | ||||
|                     fi | ||||
|                 fi | ||||
|             ;; | ||||
|         esac | ||||
| #     fi | ||||
| } | ||||
|  | ||||
| compare_u(){ | ||||
| @@ -55,15 +64,15 @@ compare_u(){ | ||||
| #         local arel=${archver##*-} brel=${artixver##*-} | ||||
| #         local reldiff | ||||
| #         reldiff=$(( $arel-${brel%.*} )) | ||||
|         msg_row_red "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}" | ||||
|         write_list "${a}:$pkg" pkg_upgrades | ||||
|         msg_row_red "${table}" "${archrepo}" "${artixrepo}" "$pkg" "$archver" "$artixver" "$(get_group)" | ||||
|         write_list "${archrepo}:$pkg" pkg_upgrades | ||||
|     fi | ||||
| } | ||||
|  | ||||
| compare_d(){ | ||||
|     if [ "$result" -eq 1 ];then | ||||
|         if [[ -n "$archver" ]] && [[ -n "$archrepo" ]];then | ||||
|             msg_row_yellow "${table}" "${a}" "${b}" "$pkg" "$archver" "$artixver" "${group#*-}" | ||||
|         if [[ -n "$archver" ]] && [[ -n "${archrepo}" ]];then | ||||
|             msg_row_yellow "${table}" "${archrepo}" "${artixrepo}" "$pkg" "$archver" "$artixver" "$(get_group)" | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
| @@ -74,31 +83,26 @@ get_archpath(){ | ||||
|     for tree in "${ARCH_TREE[@]}"; do | ||||
|         [[ -d ${TREE_DIR_ARCH}/$tree/$pkg/repos ]] && archpath=${TREE_DIR_ARCH}/$tree/$pkg | ||||
|     done | ||||
|     echo "$archpath" | ||||
|     printf "%s\n" "$archpath" | ||||
| } | ||||
|  | ||||
| pre_compare(){ | ||||
|     local func="$1" pkgpath="$2" result group pkg | ||||
|     group="${pkgpath%/*}" | ||||
|     group=${group##*/} | ||||
|     pkg=${pkgpath##*/} | ||||
|     local artixpath="$1" func="$2" pkg | ||||
|     pkg=${artixpath##*/} | ||||
|  | ||||
|     local artixrepo archrepo pkgbuild artixver archver archpath node a b | ||||
|     artixrepo=$(find_repo "$pkgpath") | ||||
|     pkgbuild=$pkgpath/$artixrepo/PKGBUILD | ||||
|     local artixrepo archrepo pkgbuild artixver archver archpath epoch | ||||
|  | ||||
|     if [[ -f $pkgbuild ]]; then | ||||
|     artixrepo=$(find_repo "$artixpath") | ||||
|     pkgbuild=$artixpath/$CARCH/$artixrepo/PKGBUILD | ||||
|  | ||||
|     if [[ -f "$pkgbuild" ]]; then | ||||
|         # shellcheck disable=1090 | ||||
|         . "$pkgbuild" 2>/dev/null | ||||
|         artixver=$(get_full_version) | ||||
|         archpath=$(get_archpath "$pkg") | ||||
|         archrepo=$(find_repo "${archpath}") | ||||
|         pkgbuild=$archpath/$archrepo/PKGBUILD | ||||
|         node=${artixrepo%/*} | ||||
|         a=${archrepo#*/} b=${artixrepo#*/} | ||||
|         a="${a%-*}" | ||||
|  | ||||
|         [[ "$node" != "$CARCH" ]] && b=${b%-*} | ||||
|         archrepo=$(find_repo "$archpath") | ||||
|         pkgbuild=$archpath/repos/$archrepo/PKGBUILD | ||||
|         archrepo="${archrepo%-*}" | ||||
|  | ||||
|         if [[ -f "$pkgbuild" ]]; then | ||||
|             # shellcheck disable=1090 | ||||
| @@ -106,27 +110,26 @@ pre_compare(){ | ||||
|             archver=$(get_full_version) | ||||
|         fi | ||||
|  | ||||
|         local result | ||||
|         result=$(vercmp "$artixver" "$archver") | ||||
|  | ||||
|         "$func" | ||||
|  | ||||
|         unset epoch | ||||
|     fi | ||||
| } | ||||
|  | ||||
| compare_upgrades(){ | ||||
|     local pkgpath="${1%/*}" | ||||
|     pre_compare compare_u "$pkgpath" | ||||
|     local artixpath="${1%/*}" | ||||
|     pre_compare "$artixpath" compare_u | ||||
| } | ||||
|  | ||||
| compare_downgrades(){ | ||||
|     local pkgpath="${1%/*}" | ||||
|     pre_compare compare_d "$pkgpath" | ||||
|     local artixpath="${1%/*}" | ||||
|     pre_compare "$artixpath" compare_d | ||||
| } | ||||
|  | ||||
| compare_move(){ | ||||
|     local pkgpath="${1%/*}" | ||||
|     pre_compare compare_m "$pkgpath" | ||||
|     local artixpath="${1%/*}" | ||||
|     pre_compare "$artixpath" compare_m | ||||
| } | ||||
|  | ||||
| #}}} | ||||
| @@ -168,16 +171,16 @@ move=false | ||||
| readonly table="%-18s %-18s %-25s %-27s %-27s %-10s" | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo '    -u            Show upgrade packages' | ||||
|     echo '    -d            Show downgrade packages' | ||||
|     echo '    -m            Show packages to move' | ||||
|     echo "    -x            Don't inlcude testing packages" | ||||
|     echo "    -y            Don't inlcude staging packages" | ||||
|     echo '    -z            Include unstable kde and gnome' | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     printf 'Usage: %s [options]\n' "${0##*/}" | ||||
|     printf '    -u            Show upgrade packages\n' | ||||
|     printf '    -d            Show downgrade packages\n' | ||||
|     printf '    -m            Show packages to move\n' | ||||
|     printf '    -x            Do not inlcude testing packages\n' | ||||
|     printf '    -y            Do not inlcude staging packages\n' | ||||
|     printf '    -z            Include unstable kde and gnome\n' | ||||
|     printf '    -h            This help\n' | ||||
|     printf '\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| @@ -192,7 +195,6 @@ while getopts "${opts}" arg; do | ||||
|         y) staging=false ;; | ||||
|         z) unstable=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|   | ||||
| @@ -61,14 +61,14 @@ cmd=${0##*/} | ||||
| dest_repo=${cmd#*-} | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${cmd} [options]" | ||||
|     echo '    -d <dest>          Destination repository' | ||||
|     echo '    -a                 Add package(s) to repository' | ||||
|     echo '    -r                 Remove package(s) from repository' | ||||
|     echo '    -l                 Use links db' | ||||
|     echo '    -h                 This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     printf "Usage: %s [options]\n" "${cmd}" | ||||
|     printf '    -d <dest>          Destination repository\n' | ||||
|     printf '    -a                 Add package(s) to repository\n' | ||||
|     printf '    -r                 Remove package(s) from repository\n' | ||||
|     printf '    -l                 Use links db\n' | ||||
|     printf '    -h                 This help\n' | ||||
|     printf '\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| @@ -81,7 +81,6 @@ while getopts "${opts}" arg; do | ||||
|         r) rm_pkg=true; add_pkg=false ;; | ||||
|         l) linksdb=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|   | ||||
| @@ -32,9 +32,9 @@ case $script_mode in | ||||
| esac | ||||
|  | ||||
| if [[ -z $1 ]]; then | ||||
|     echo "${0##*/} [options] <package file|extracted package dir>" | ||||
|     echo "Options:" | ||||
|     echo "    --ignore-internal      ignore internal libraries" | ||||
|     printf "%s [options] <package file|extracted package dir>\n" "${0##*/}" | ||||
|     printf "Options:\n" | ||||
|     printf "    --ignore-internal      ignore internal libraries\n" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| @@ -61,7 +61,7 @@ process_sofile() { | ||||
|     fi | ||||
|     if ! in_array "${soname}=${soversion}-${soarch}" "${soobjects[@]}"; then | ||||
|         # libfoo.so=1-64 | ||||
|         echo "${soname}=${soversion}-${soarch}" | ||||
|         printf "%s\n" "${soname}=${soversion}-${soarch}" | ||||
|         soobjects+=("${soname}=${soversion}-${soarch}") | ||||
|     fi | ||||
| } | ||||
|   | ||||
| @@ -17,11 +17,11 @@ m4_include(lib/base/message.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 '' | ||||
|     printf 'Usage: finddeps <depname>\n' | ||||
|     printf '\n' | ||||
|     printf 'Find packages that depend on a given depname.\n' | ||||
|     printf 'Run this script from the top-level directory of your ABS tree.\n' | ||||
|     printf '\n' | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
|   | ||||
| @@ -55,13 +55,13 @@ transfer_repo() { | ||||
| #}}} | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo '    -r <repo>     Repo name' | ||||
|     echo '    -c            Create git repo' | ||||
|     echo '    -t            Transfer git repo to landfill org' | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     echo '' | ||||
|     printf "Usage: %s [options]\n" "${0##*/}" | ||||
|     printf '    -r <repo>     Repo name\n' | ||||
|     printf '    -c            Create git repo\n' | ||||
|     printf '    -t            Transfer git repo to landfill org\n' | ||||
|     printf '    -h            This help\n' | ||||
|     printf '\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| @@ -76,7 +76,6 @@ while getopts "${opts}" arg; do | ||||
|         c) create=true ;; | ||||
|         t) transfer=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|   | ||||
| @@ -40,7 +40,7 @@ for tree in $PATH $libdirs $extras; do | ||||
|             #  Is an ELF binary. | ||||
|             if (( $(ldd "$i" 2>/dev/null | grep -c 'not found') != 0 )); then | ||||
|                 #  Missing lib. | ||||
|                 echo "$i:" >> "$TEMPDIR/raw.txt" | ||||
|                 printf "%s\n" "$i:" >> "$TEMPDIR/raw.txt" | ||||
|                 ldd "$i" 2>/dev/null | grep 'not found' >> "$TEMPDIR/raw.txt" | ||||
|             fi | ||||
|         fi | ||||
|   | ||||
| @@ -87,7 +87,7 @@ find_pkgentry() { | ||||
|     for pkgentry in "$tmpdir/${REPO_DB_NAME}/$pkgname"*; do | ||||
|         name=${pkgentry##*/} | ||||
|         if [[ ${name%-*-*} = "$pkgname" ]]; then | ||||
|             echo "$pkgentry" | ||||
|             printf "%s\n" "$pkgentry" | ||||
|             return 0 | ||||
|         fi | ||||
|     done | ||||
| @@ -238,7 +238,7 @@ db_remove_entry() { | ||||
|  | ||||
|         # remove entries in "links" database | ||||
|         local linksentry | ||||
|         linksentry=$(echo "$pkgentry" | sed 's/\(.*\)\/db\//\1\/links\//') | ||||
|         linksentry=$(printf "%s\n" "$pkgentry" | sed 's/\(.*\)\/db\//\1\/links\//') | ||||
|         rm -rf "$linksentry" | ||||
|  | ||||
|         pkgentry=$(find_pkgentry "$pkgname") | ||||
| @@ -258,7 +258,7 @@ prepare_repo_db() { | ||||
|     fi | ||||
|  | ||||
|     # check lock file | ||||
|     if ( set -o noclobber; echo "$$" > "$LOCKFILE") 2> /dev/null; then | ||||
|     if ( set -o noclobber; printf "%s\n" "$$" > "$LOCKFILE") 2> /dev/null; then | ||||
|         CLEAN_LOCK=1 | ||||
|     else | ||||
|         error "Failed to acquire lockfile: %s." "$LOCKFILE" | ||||
| @@ -399,7 +399,7 @@ trap_exit() { | ||||
|     # unhook all traps to avoid race conditions | ||||
|     trap '' EXIT TERM HUP QUIT INT ERR | ||||
|  | ||||
|     echo | ||||
|     printf '\n' | ||||
|     error "$@" | ||||
|     clean_up 1 | ||||
| } | ||||
|   | ||||
| @@ -44,43 +44,43 @@ copy=$USER | ||||
| src_owner=${SUDO_USER:-$USER} | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options] -r <chrootdir> [--] [makepkg args]" | ||||
|     echo ' Run this script in a PKGBUILD dir to build a package inside a' | ||||
|     echo ' clean chroot. Arguments passed to this script after the' | ||||
|     echo ' end-of-options marker (--) will be passed to makepkg.' | ||||
|     echo '' | ||||
|     echo ' The chroot dir consists of the following directories:' | ||||
|     echo ' <chrootdir>/{root, copy} but only "root" is required' | ||||
|     echo ' by default. The working copy will be created as needed' | ||||
|     echo '' | ||||
|     echo 'The chroot "root" directory must be created via the following' | ||||
|     echo 'command:' | ||||
|     echo '    mkchroot <chrootdir>/root base-devel' | ||||
|     echo '' | ||||
|     echo 'This script reads {SRC,SRCPKG,PKG,LOG}DEST, MAKEFLAGS and PACKAGER' | ||||
|     echo 'from makepkg.conf(5), if those variables are not part of the' | ||||
|     echo 'environment.' | ||||
|     echo '' | ||||
|     echo "Default makepkg args: ${default_makepkg_args[*]}" | ||||
|     echo '' | ||||
|     echo 'Flags:' | ||||
|     echo '-h         This help' | ||||
|     echo '-c         Clean the chroot before building' | ||||
|     echo '-d <dir>   Bind directory into build chroot as read-write' | ||||
|     echo '-D <dir>   Bind directory into build chroot as read-only' | ||||
|     echo '-u         Update the working copy of the chroot before building' | ||||
|     echo '           This is useful for rebuilds without dirtying the pristine' | ||||
|     echo '           chroot' | ||||
|     echo '-r <dir>   The chroot dir to use' | ||||
|     echo '-I <pkg>   Install a package into the working copy of the chroot' | ||||
|     echo '-l <copy>  The directory to use as the working copy of the chroot' | ||||
|     echo '           Useful for maintaining multiple copies' | ||||
|     echo "           Default: $copy" | ||||
|     echo '-n         Run namcap on the package' | ||||
|     echo '-C         Run checkpkg on the package' | ||||
|     echo '-N         Disable check() function' | ||||
|     echo '-T         Build in a temporary directory' | ||||
|     echo '-U         Run makepkg as a specified user' | ||||
|     printf 'Usage: %s [options] -r <chrootdir> [--] [makepkg args]\n' "${0##*/}" | ||||
|     printf ' Run this script in a PKGBUILD dir to build a package inside a\n' | ||||
|     printf ' clean chroot. Arguments passed to this script after the\n' | ||||
|     printf ' end-of-options marker (--) will be passed to makepkg.\n' | ||||
|     printf '\n' | ||||
|     printf ' The chroot dir consists of the following directories:\n' | ||||
|     printf ' <chrootdir>/{root, copy} but only "root" is required\n' | ||||
|     printf ' by default. The working copy will be created as needed\n' | ||||
|     printf '\n' | ||||
|     printf "The chroot 'root' directory must be created via the following\n" | ||||
|     printf 'command:\n' | ||||
|     printf '    mkchroot <chrootdir>/root base-devel\n' | ||||
|     printf '\n' | ||||
|     printf 'This script reads {SRC,SRCPKG,PKG,LOG}DEST, MAKEFLAGS and PACKAGER\n' | ||||
|     printf 'from makepkg.conf(5), if those variables are not part of the\n' | ||||
|     printf 'environment.\n' | ||||
|     printf '\n' | ||||
|     printf 'Default makepkg args: %s\n' "${default_makepkg_args[*]}" | ||||
|     printf '\n' | ||||
|     printf 'Flags:\n' | ||||
|     printf ' -h         This help\n' | ||||
|     printf ' -c         Clean the chroot before building\n' | ||||
|     printf ' -d <dir>   Bind directory into build chroot as read-write\n' | ||||
|     printf ' -D <dir>   Bind directory into build chroot as read-only\n' | ||||
|     printf ' -u         Update the working copy of the chroot before building\n' | ||||
|     printf '           This is useful for rebuilds without dirtying the pristine\n' | ||||
|     printf '           chroot\n' | ||||
|     printf ' -r <dir>   The chroot dir to use\n' | ||||
|     printf ' -I <pkg>   Install a package into the working copy of the chroot\n' | ||||
|     printf ' -l <copy>  The directory to use as the working copy of the chroot\n' | ||||
|     printf '            Useful for maintaining multiple copies\n' | ||||
|     printf '            Default: %s\n' "$copy" | ||||
|     printf ' -n         Run namcap on the package\n' | ||||
|     printf ' -C         Run checkpkg on the package\n' | ||||
|     printf ' -N         Disable check() function\n' | ||||
|     printf ' -T         Build in a temporary directory\n' | ||||
|     printf ' -U         Run makepkg as a specified user\n' | ||||
|     exit 1 | ||||
| } | ||||
|  | ||||
| @@ -182,7 +182,7 @@ prepare_chroot() { | ||||
|         "MAKEFLAGS='${MAKEFLAGS:-}'" "PACKAGER='${PACKAGER:-}'" | ||||
|     do | ||||
|         grep -q "^$x" "$copydir/etc/makepkg.conf" && continue | ||||
|         echo "$x" >>"$copydir/etc/makepkg.conf" | ||||
|         printf "%s\n" "$x" >>"$copydir/etc/makepkg.conf" | ||||
|     done | ||||
|  | ||||
|     cat > "$copydir/etc/sudoers.d/builduser-pacman" <<EOF | ||||
| @@ -239,7 +239,7 @@ _chrootbuild() { | ||||
| _chrootnamcap() { | ||||
|     pacman -S --needed --noconfirm namcap | ||||
|     for pkgfile in /startdir/PKGBUILD /pkgdest/*; do | ||||
|         echo "Checking ${pkgfile##*/}" | ||||
|         printf "Checking %s\n" "${pkgfile##*/}" | ||||
|         sudo -u builduser namcap "$pkgfile" 2>&1 | tee "/logdest/${pkgfile##*/}-namcap.log" | ||||
|     done | ||||
| } | ||||
|   | ||||
							
								
								
									
										59
									
								
								bin/pkg/mkdepgraph.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								bin/pkg/mkdepgraph.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| #!/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. | ||||
|  | ||||
| mk_graph(){ | ||||
|     printf "%s\n" "$(pactree "${pactree_args[@]}" "${package}")" \ | ||||
|         | dot -T "${ext}" > "${graph_dir}/${package}.${ext}" | ||||
| } | ||||
|  | ||||
|  | ||||
| usage() { | ||||
|     printf "Usage: %s [options] <package>\n" "${0##*/}" | ||||
|     printf "    -l               enable linear output\n" | ||||
|     printf "    -r               list packages that depend on the named package\n" | ||||
|     printf "    -u               show dependencies with no duplicates (implies -l)\n" | ||||
|     printf "    -d <#>           limit the depth of recursion\n" | ||||
|     printf "    -o <#>           controls at which depth to stop printing optional deps\n" | ||||
|     printf "                     (-1 for no limit)\n" | ||||
|     printf "    -h               display this help message\n" | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| graph_dir=${XDG_PICTURES_DIR:-$(xdg-user-dir PICTURES)/artix} | ||||
| ext="png" | ||||
|  | ||||
| pactree_args=(-gs) | ||||
|  | ||||
| depth=0 | ||||
| optdepth=-1 | ||||
|  | ||||
| while getopts :d:o:rluh arg; do | ||||
|     case "${arg}" in | ||||
|         r) pactree_args+=(-r) ;; | ||||
|         l) pactree_args+=(-l) ;; | ||||
|         u) pactree_args+=(-u) ;; | ||||
|         d) depth="$OPTARG"; pactree_args+=(-d "$depth") ;; | ||||
|         o) optdepth="$OPTARG"; pactree_args+=(-o"$optdepth") ;; | ||||
|         h|?) usage 0 ;; | ||||
|     esac | ||||
| done | ||||
| shift $(( OPTIND - 1 )) | ||||
|  | ||||
| package="$1" | ||||
|  | ||||
| if [[ ! -d "${graph_dir}" ]];then | ||||
|     mkdir -p "${graph_dir}" | ||||
| fi | ||||
|  | ||||
| mk_graph | ||||
| @@ -146,16 +146,16 @@ write_srcyaml(){ | ||||
|     yaml_write_global | ||||
|     yaml_write_package | ||||
|     yaml_write_fileinfo | ||||
|     printf '%s' "${Yaml}" | ||||
|     printf '%s\n' "${Yaml}" | ||||
| } | ||||
|  | ||||
| #}}} | ||||
|  | ||||
| usage() { | ||||
|     echo "Usage: ${0##*/} [options]" | ||||
|     echo "    -d            Don't include details" | ||||
|     echo '    -h            This help' | ||||
|     echo '' | ||||
|     printf 'Usage: %s [options]\n' "${0##*/}" | ||||
|     printf '    -d            Do not include details\n' | ||||
|     printf '    -h            This help\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| @@ -167,7 +167,6 @@ while getopts "${opts}" arg; do | ||||
|     case "${arg}" in | ||||
|         d) details=false ;; | ||||
|         h|?) usage 0 ;; | ||||
|         *) echo "invalid argument '${arg}'"; usage 1 ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|   | ||||
							
								
								
									
										202
									
								
								bin/pkg/tidyarch.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								bin/pkg/tidyarch.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,202 @@ | ||||
| #!/bin/bash | ||||
| # | ||||
| # Copyright (C) 2018-20 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. | ||||
|  | ||||
| m4_include(lib/util-base.sh) | ||||
| m4_include(lib/util-pkg.sh) | ||||
| m4_include(lib/base/message.sh) | ||||
| m4_include(lib/pkg/repo.sh) | ||||
|  | ||||
| git_rm() { | ||||
|     local r="$1" | ||||
|     if ! "$run_f"; then | ||||
|         printf "git rm -r %s\n" "$r" | ||||
|         printf "git commit -m 'remove %s'\n" "${r##*/}" | ||||
|     else | ||||
|         git rm -r  "$r" | ||||
|         git commit -m "remove ${r##*/}" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| compare_ver() { | ||||
|     local a="$1" b="$2" tree="$3" func="$4" va vb | ||||
|     # shellcheck disable=1090 | ||||
|     source "$a"/PKGBUILD 2>/dev/null | ||||
|     va=$(get_full_version) | ||||
|     unset pkgver epoch pkgrel arch | ||||
|     # shellcheck disable=1090 | ||||
|     source "$b"/PKGBUILD 2>/dev/null | ||||
|     vb=$(get_full_version) | ||||
|     unset pkgver epoch pkgrel arch | ||||
|     msg2 "a: %s b: %s" "$va" "$vb" | ||||
|     local ret | ||||
|     ret=$(vercmp "$va" "$vb") | ||||
|     msg2 "ret: %s" "$ret" | ||||
|     if [ "$ret" -gt 0 ]; then | ||||
|         git_rm "$b" | ||||
|     elif [ "$ret" -lt 0 ]; then | ||||
|         git_rm "$a" | ||||
|     else | ||||
|         case "$tree" in | ||||
|             "${ARCH_TREE[0]}") git_rm "$a" ;; | ||||
|             "${ARCH_TREE[1]}") git_rm "$b" ;; | ||||
|         esac | ||||
|     fi | ||||
| } | ||||
|  | ||||
| check_duplicates() { | ||||
|     mapfile -t duplicates < <(find "${TREE_DIR_ARCH}" -mindepth 2 -maxdepth 2 -type d -not -path "*.git" -printf '%f\n' | sort | uniq -d) | ||||
|  | ||||
|     for p in "${duplicates[@]}"; do | ||||
|         msg "%s" "$p" | ||||
|         local av bv a b | ||||
|  | ||||
|         a="${TREE_DIR_ARCH}/${ARCH_TREE[0]}" | ||||
|         # shellcheck disable=1090 | ||||
|         source "$a/$p"/trunk/PKGBUILD 2>/dev/null | ||||
|         av=$(get_full_version) | ||||
|  | ||||
|         b="${TREE_DIR_ARCH}/${ARCH_TREE[1]}" | ||||
|         # shellcheck disable=1090 | ||||
|         source "$b/$p"/trunk/PKGBUILD 2>/dev/null | ||||
|         bv=$(get_full_version) | ||||
|  | ||||
|         msg2 "a: %s b: %s" "$av" "$bv" | ||||
|         ret=$(vercmp "$av" "$bv") | ||||
|         msg2 "ret: %s" "$ret" | ||||
|  | ||||
|         if [ "$ret" -gt 0 ]; then | ||||
|             cd "$b" | ||||
|             msg2 "%s" "${b##*/}" | ||||
|             git_rm "$p" | ||||
|         elif [ "$ret" -lt 0 ]; then | ||||
|             cd "$a" | ||||
|             msg2 "%s" "${a##*/}" | ||||
|             git_rm "$p" | ||||
|         fi | ||||
|     done | ||||
| } | ||||
| # git config core.mergeoptions --no-edit | ||||
| check_tree() { | ||||
|     for tree in "${ARCH_TREE[@]}"; do | ||||
|         cd "${TREE_DIR_ARCH}/$tree" || exit | ||||
|  | ||||
|         mapfile -t pkgs < <(find . -mindepth 2 -maxdepth 2 -type d -name repos | sort) | ||||
|  | ||||
|         for p in "${pkgs[@]}"; do | ||||
|  | ||||
|             mapfile -t repos < <(find "$p" -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | sort) | ||||
|  | ||||
|             local repos_dir=$p | ||||
|             p=${p%/*} | ||||
|             p=${p##*/} | ||||
|             local size=${#repos[@]} | ||||
|  | ||||
|             if (( "$size" > 1 )); then | ||||
|                 if [[ "${repos[1]}" != "${valid_names[11]}"-* ]] || [[ "${repos[1]}" != "${valid_names[12]}"-* ]]; then | ||||
|  | ||||
|                     local a="$repos_dir/${repos[0]}" b="$repos_dir/${repos[1]}" | ||||
|  | ||||
|                     # repo mismatches | ||||
|                     if [[ "${repos[0]}" == "${valid_names[2]}"-* ]] && [[ "${repos[1]}" == "${valid_names[1]}"-* ]]; then | ||||
|                         msg "%s: %s" "$p" "${repos[*]}" | ||||
|                         msg2 "%s" "$tree" | ||||
|                         compare_ver "$a" "$b" "$tree" | ||||
|  | ||||
|                     elif [[ "${repos[0]}" == "${valid_names[2]}"-* ]] && [[ "${repos[1]}" == "${valid_names[7]}"-* ]]; then | ||||
|                         msg "%s: %s" "$p" "${repos[*]}" | ||||
|                         msg2 "%s" "$tree" | ||||
|                         compare_ver "$a" "$b" "$tree" | ||||
|  | ||||
|                     elif [[ "${repos[0]}" == "${valid_names[2]}"-* ]] && [[ "${repos[1]}" == "${valid_names[4]}"-* ]]; then | ||||
|                         msg "%s: %s" "$p" "${repos[*]}" | ||||
|                         msg2 "%s" "$tree" | ||||
|                         compare_ver "$a" "$b" "$tree" | ||||
|  | ||||
|                     elif [[ "${repos[0]}" == "${valid_names[0]}"-* ]] && [[ "${repos[1]}" == "${valid_names[1]}"-* ]]; then | ||||
|                         msg "%s: %s" "$p" "${repos[*]}" | ||||
|                         msg2 "%s" "$tree" | ||||
|                         compare_ver "$a" "$b" "$tree" | ||||
|  | ||||
|                     elif [[ "${repos[0]}" == "${valid_names[2]}"-* ]] && [[ "${repos[1]}" == "${valid_names[0]}"-* ]]; then | ||||
|                         msg "%s: %s" "$p" "${repos[*]}" | ||||
|                         msg2 "%s" "$tree" | ||||
|                         compare_ver "$a" "$b" "$tree" | ||||
|  | ||||
|                     elif [[ "${repos[0]}" == "${valid_names[3]}"-* ]] && [[ "${repos[1]}" == "${valid_names[7]}"-* ]]; then | ||||
|                         msg "%s: %s" "$p" "${repos[*]}" | ||||
|                         msg2 "%s" "$tree" | ||||
|                         compare_ver "$a" "$b" "$tree" | ||||
|  | ||||
|                     elif [[ "${repos[0]}" == "${valid_names[3]}"-* ]] && [[ "${repos[1]}" == "${valid_names[4]}"-* ]]; then | ||||
|                         msg "%s: %s" "$p" "${repos[*]}" | ||||
|                         msg2 "%s" "$tree" | ||||
|                         compare_ver "$a" "$b" "$tree" | ||||
|                     fi | ||||
|  | ||||
|                     # same repo name but different arch | ||||
|                     if [[ "${repos[0]}" == "${valid_names[0]}"-any ]] && [[ "${repos[1]}" == "${valid_names[0]}"-"$CARCH" ]]; then | ||||
|                         msg "%s: %s" "$p" "${repos[*]}" | ||||
|                         msg2 "%s" "$tree" | ||||
|                         compare_ver "$a" "$b" "$tree" | ||||
|  | ||||
|                     elif [[ "${repos[0]}" == "${valid_names[1]}"-any ]] && [[ "${repos[1]}" == "${valid_names[1]}"-"$CARCH" ]]; then | ||||
|                         msg "%s: %s" "$p" "${repos[*]}" | ||||
|                         msg2 "%s" "$tree" | ||||
|                         compare_ver "$a" "$b" "$tree" | ||||
|  | ||||
|                     elif [[ "${repos[0]}" == "${valid_names[2]}"-any ]] && [[ "${repos[1]}" == "${valid_names[2]}"-"$CARCH" ]]; then | ||||
|                         msg "%s: %s" "$p" "${repos[*]}" | ||||
|                         msg2 "%s" "$tree" | ||||
|                         compare_ver "$a" "$b" "$tree" | ||||
|                     fi | ||||
|                 fi | ||||
|             fi | ||||
|         done | ||||
|     done | ||||
| } | ||||
|  | ||||
| usage() { | ||||
|     printf 'Usage: %s\n' "${0##*/}" | ||||
|     printf '    -f                 Apply filter\n' | ||||
|     printf '    -r                 Run removal\n' | ||||
|     printf '    -d                 Check for duplicates\n' | ||||
|     printf '    -h                 This help\n' | ||||
|     printf '\n' | ||||
|     printf '\n' | ||||
|     exit "$1" | ||||
| } | ||||
|  | ||||
| load_makepkg_config | ||||
|  | ||||
| load_valid_names | ||||
|  | ||||
| filter=false | ||||
| dupl=false | ||||
| run_f=false | ||||
|  | ||||
| opts='hrfd' | ||||
|  | ||||
| while getopts ${opts} arg; do | ||||
|     case "${arg}" in | ||||
|         f) filter=true ;; | ||||
|         r) run_f=true ;; | ||||
|         d) dupl=true ;; | ||||
|         h|?) usage 0 ;; | ||||
|     esac | ||||
| done | ||||
| shift $(( OPTIND - 1 )) | ||||
|  | ||||
| "$filter" && check_tree | ||||
|  | ||||
| "$dupl" && check_duplicates | ||||
| @@ -24,7 +24,13 @@ | ||||
| #         packages-qt6 | ||||
| #         packages-xorg | ||||
| #         packages-plasma | ||||
| #         packages-kde | ||||
| #         kde-utils | ||||
| #         kde-devel | ||||
| #         kde-media | ||||
| #         kde-games | ||||
| #         kde-edu | ||||
| #         kde-net | ||||
| #         kde-pim | ||||
| #         packages-gnome | ||||
| #         packages-cinnamon | ||||
| #         packages-lxqt | ||||
|   | ||||
| @@ -45,12 +45,13 @@ CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions \ | ||||
|         -fstack-clash-protection -fcf-protection" | ||||
| CXXFLAGS="$CFLAGS -Wp,-D_GLIBCXX_ASSERTIONS" | ||||
| LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now" | ||||
| LTOFLAGS="-flto=auto" | ||||
| #RUSTFLAGS="-C opt-level=2" | ||||
| #-- Make Flags: change this for DistCC/SMP systems | ||||
| #MAKEFLAGS="-j2" | ||||
| #-- Debugging flags | ||||
| DEBUG_CFLAGS="-g" | ||||
| DEBUG_CXXFLAGS="-g" | ||||
| DEBUG_CXXFLAGS="$DEBUG_CFLAGS" | ||||
| #DEBUG_RUSTFLAGS="-C debuginfo=2" | ||||
|  | ||||
| ######################################################################### | ||||
|   | ||||
| @@ -3,11 +3,11 @@ | ||||
| #{{{ yaml | ||||
|  | ||||
| write_yaml_header(){ | ||||
|     printf '%s' '---' | ||||
|     printf '%s\n' '---' | ||||
| } | ||||
|  | ||||
| write_empty_line(){ | ||||
|     printf '\n%s\n' ' ' | ||||
|     printf '\n' | ||||
| } | ||||
|  | ||||
| write_yaml_map(){ | ||||
|   | ||||
| @@ -13,7 +13,7 @@ write_services_conf(){ | ||||
|         yaml+=$(write_yaml_seq 2 "$svc") | ||||
|     done | ||||
|     yaml+=$(write_empty_line) | ||||
|     printf '%s' "${yaml}" | ||||
|     printf '%s\n' "${yaml}" | ||||
| } | ||||
|  | ||||
| write_services_openrc_conf(){ | ||||
| @@ -29,6 +29,7 @@ write_services_runit_conf(){ | ||||
| write_services_s6_conf(){ | ||||
|     local conf="$1"/services-s6.conf | ||||
|     write_services_conf 'svDir' '/etc/s6/sv' 'dbDir' '/etc/s6/rc/compiled' > "$conf" | ||||
|     printf '%s\n' "defaultBundle: default" >> "$conf" | ||||
| } | ||||
|  | ||||
| write_services_suite66_conf(){ | ||||
|   | ||||
| @@ -5,13 +5,13 @@ | ||||
| get_disturl(){ | ||||
|     # shellcheck disable=1091 | ||||
|     . /usr/lib/os-release | ||||
|     echo "${HOME_URL}" | ||||
|     printf "%s\n" "${HOME_URL}" | ||||
| } | ||||
|  | ||||
| get_osname(){ | ||||
|     # shellcheck disable=1091 | ||||
|     . /usr/lib/os-release | ||||
|     echo "${NAME}" | ||||
|     printf "%s\n" "${NAME}" | ||||
| } | ||||
|  | ||||
| assemble_iso(){ | ||||
|   | ||||
| @@ -7,7 +7,7 @@ get_compliant_name(){ | ||||
|     case "$gitname" in | ||||
|         *+) gitname=${gitname//+/plus} | ||||
|     esac | ||||
|     echo "$gitname" | ||||
|     printf "%s\n" "$gitname" | ||||
| } | ||||
|  | ||||
| get_pkg_org(){ | ||||
| @@ -18,7 +18,7 @@ get_pkg_org(){ | ||||
|         python-*|python2-*) org="packagesPython" ;; | ||||
|         *) sub=${pkg:0:1}; org="packages${sub^^}" ;; | ||||
|     esac | ||||
|     echo "$org" | ||||
|     printf "%s\n" "$org" | ||||
| } | ||||
|  | ||||
| api_put() { | ||||
|   | ||||
| @@ -31,7 +31,7 @@ get_pkgbasename() { | ||||
|     rm_pkg=${rm_pkg%-*} | ||||
|     rm_pkg=${rm_pkg%-*} | ||||
|     rm_pkg=${rm_pkg%-*} | ||||
|     echo "$rm_pkg" | ||||
|     printf "%s\n" "$rm_pkg" | ||||
| } | ||||
|  | ||||
| #}}} | ||||
|   | ||||
| @@ -22,12 +22,9 @@ has_changeset(){ | ||||
| } | ||||
|  | ||||
| pull_tree(){ | ||||
|     local tree="$1" local_head="$2" os="${3:-Artix}" | ||||
|     local remote_head | ||||
|     remote_head=$(get_remote_head) | ||||
|  | ||||
|     msg "Checking (%s) (%s)" "${tree}" "$os" | ||||
|     if has_changeset "${local_head}" "${remote_head}";then | ||||
|     local tree="$1" lh="$2" rh | ||||
|     rh=$(get_remote_head) | ||||
|     if has_changeset "${lh}" "${rh}";then | ||||
|         git pull origin master | ||||
|     fi | ||||
| } | ||||
|   | ||||
| @@ -6,11 +6,11 @@ write_jenkinsfile(){ | ||||
|     local pkg="$1" | ||||
|     local jenkins=$pkg/Jenkinsfile | ||||
|  | ||||
|     echo "@Library('artix-ci') import org.artixlinux.RepoPackage" > "$jenkins" | ||||
|     printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "$jenkins" | ||||
|     { | ||||
|     echo '' | ||||
|     echo 'PackagePipeline(new RepoPackage(this))' | ||||
|     echo '' | ||||
|     printf '\n' | ||||
|     printf 'PackagePipeline(new RepoPackage(this))\n' | ||||
|     printf '\n' | ||||
|     } >> "$jenkins" | ||||
|  | ||||
|     git add "$jenkins" | ||||
| @@ -21,11 +21,11 @@ write_agentyaml(){ | ||||
|     local agent="$pkg"/.artixlinux/agent.yaml label='master' | ||||
|     [[ -d $pkg/.artixlinux ]] || mkdir "$pkg"/.artixlinux | ||||
|  | ||||
|     echo '---' > "$agent" | ||||
|     printf '%s\n' '---' > "$agent" | ||||
|     { | ||||
|     echo '' | ||||
|     echo "label: $label" | ||||
|     echo '' | ||||
|     printf '\n' | ||||
|     printf "label: %s\n" "$label" | ||||
|     printf '\n' | ||||
|     } >> "$agent" | ||||
|  | ||||
|     git add "$agent" | ||||
| @@ -37,7 +37,7 @@ commit_jenkins_files(){ | ||||
|     write_jenkinsfile "$pkg" | ||||
|     write_agentyaml "$pkg" | ||||
|  | ||||
|     git commit -m "initial commit" | ||||
|     git commit -m "initial ci commit" | ||||
| } | ||||
|  | ||||
| #}}} | ||||
|   | ||||
| @@ -25,25 +25,25 @@ set_arch_repos(){ | ||||
| find_repo(){ | ||||
|     local pkg="$1" pkgarch="${2:-${CARCH}}" repo | ||||
|     for r in "${ARCH_REPOS[@]}"; do | ||||
|         [[ -f $pkg/repos/$r-$pkgarch/PKGBUILD ]] && repo=repos/"$r-$pkgarch" | ||||
|         [[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo=repos/"$r"-any | ||||
|         [[ -f $pkg/$pkgarch/$r/PKGBUILD ]] && repo="$pkgarch/$r" | ||||
|         [[ -f $pkg/repos/$r-$pkgarch/PKGBUILD ]] && repo="$r-$pkgarch" | ||||
|         [[ -f $pkg/repos/$r-any/PKGBUILD ]] && repo="$r"-any | ||||
|         [[ -f $pkg/$pkgarch/$r/PKGBUILD ]] && repo="$r" | ||||
|     done | ||||
|     echo "$repo" | ||||
|     printf "%s\n" "$repo" | ||||
| } | ||||
|  | ||||
| find_pkg(){ | ||||
|     local searchdir="$1" pkg="$2" result | ||||
|     result=$(find "$searchdir" -mindepth 2 -maxdepth 2 -type d -name "$pkg") | ||||
|     echo "$result" | ||||
|     printf "%s\n" "$result" | ||||
| } | ||||
|  | ||||
| tree_loop(){ | ||||
|     local func="$1" pkgs | ||||
|     for tree in "${ARTIX_TREE[@]}"; do | ||||
|         pkgs=$(find "${TREE_DIR_ARTIX}/$tree" -name "$CARCH" | sort) | ||||
|         for _package in ${pkgs}; do | ||||
|             "$func" "$_package" | ||||
|         mapfile -t pkgs < <(find "${TREE_DIR_ARTIX}/$tree" -name "$CARCH" | sort) | ||||
|         for p in "${pkgs[@]}"; do | ||||
|             "$func" "$p" | ||||
|         done | ||||
|     done | ||||
| } | ||||
|   | ||||
| @@ -23,18 +23,19 @@ load_pkg_config(){ | ||||
|  | ||||
|     ARTIX_TREE=( | ||||
|         packages community | ||||
|         packages-{gfx,media,net} | ||||
|         packages-{llvm,gfx,media,net} | ||||
|     ) | ||||
|  | ||||
|     local dev_tree=( | ||||
|         packages-{llvm,python,perl,java,ruby,misc} | ||||
|         packages-{python,perl,java,ruby,misc} | ||||
|         python-{world,galaxy,galaxy-groups,misc} | ||||
|     ) | ||||
|  | ||||
|     local init_tree=(packages-{openrc,runit,s6,suite66,dinit}) | ||||
|  | ||||
|     local desktop_tree=( | ||||
|         packages-{kf5,plasma,kde,qt5,qt6,xorg,gtk} | ||||
|         packages-{xorg,gtk,qt5,qt6,kf5,plasma} | ||||
|         kde-{utils,devel,net,pim,media,edu,games} | ||||
|         packages-{lxqt,gnome,cinnamon,mate,xfce,wm,lxde} | ||||
|     ) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user