diff options
author | Mike Frysinger <vapier@gentoo.org> | 2016-03-27 13:07:57 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2016-03-27 13:07:57 -0400 |
commit | 26d038ae9c2f499cfb52486913cc326854a50571 (patch) | |
tree | 5143d651e6f51fcca7dc9a0eaf7d496f800d0cf1 | |
parent | usage: handle optional args, and auto-align display (diff) | |
download | portage-utils-26d038ae.tar.gz portage-utils-26d038ae.tar.bz2 portage-utils-26d038ae.zip |
q: migrate to new repo posthook system
This also extends the reinit interface to optionally take a path to the
overlay to process. That allows the postsync hook to fire on specific
repos rather than all of them.
URL: https://bugs.gentoo.org/522032
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | Makefile.am | 5 | ||||
-rw-r--r-- | main.c | 3 | ||||
-rw-r--r-- | main.h | 1 | ||||
-rw-r--r-- | man/q.1 | 6 | ||||
-rw-r--r-- | q.c | 34 | ||||
-rw-r--r-- | repo.postsync/q-reinit | 10 |
7 files changed, 54 insertions, 12 deletions
@@ -27,9 +27,11 @@ LIBADD += $(shell echo | $(CC) -dM -E - | grep -q ' __FreeBSD__' && echo '-lk LIBADD += -liniparser DESTDIR := PREFIX := $(DESTDIR)/usr +ETCDIR := $(DESTDIR)/etc STRIP := strip MKDIR := mkdir -p CP := cp +INSTALL_EXE := install -m755 ifndef V Q = @ @@ -106,13 +108,16 @@ testclean: install: all $(MKDIR) $(PREFIX)/bin/ - $(CP) q $(PREFIX)/bin/ + $(INSTALL_EXE) q $(PREFIX)/bin/ set -e ; \ for applet in $(filter-out q,$(APPLETS)) ; do \ ln -sf q $(PREFIX)/bin/$${applet} ; \ done + $(MKDIR) $(ETCDIR)/portage/repo.postsync.d + $(INSTALL_EXE) repo.postsync/* $(ETCDIR)/portage/repo.postsync.d/ + ifneq ($(wildcard man/*.1),) $(MKDIR) $(PREFIX)/share/man/man1/ cp $(wildcard man/*.1) $(PREFIX)/share/man/man1/ diff --git a/Makefile.am b/Makefile.am index 225c9791..362ee219 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,6 +2,11 @@ ACLOCAL_AMFLAGS = -I autotools/m4 SUBDIRS = autotools/gnulib +portagedir = $(sysconfdir)/portage +postsyncddir = $(portagedir)/repo.postsync.d + +dist_postsyncd_SCRIPTS = repo.postsync/q-reinit + bin_PROGRAMS = q q_SOURCES = main.c q_CPPFLAGS = \ @@ -976,7 +976,8 @@ initialize_flat(const char *overlay, int cache_type, bool force) } if (!quiet) - warn("Updating ebuild %scache ... ", cache_type == CACHE_EBUILD ? "" : "meta"); + warn("Updating ebuild %scache in %s ... ", + cache_type == CACHE_EBUILD ? "" : "meta", overlay); count = frac = secs = 0; @@ -99,3 +99,4 @@ getopt_long(argc, argv, ex A ## _FLAGS, a ## _long_opts, NULL) #define a_argument required_argument +#define opt_argument optional_argument @@ -1,4 +1,4 @@ -.TH q "1" "Mar 2014" "Gentoo Foundation" "q" +.TH q "1" "Mar 2016" "Gentoo Foundation" "q" .SH NAME q \- invoke a portage utility applet .SH SYNOPSIS @@ -11,10 +11,10 @@ q \- invoke a portage utility applet \fB\-i\fR, \fB\-\-install\fR Install symlinks for applets .TP -\fB\-r\fR, \fB\-\-reinitialize\fR +\fB\-r\fR \fI[arg]\fR, \fB\-\-reinitialize\fR \fI[arg]\fR Reinitialize ebuild cache .TP -\fB\-m\fR, \fB\-\-metacache\fR +\fB\-m\fR \fI[arg]\fR, \fB\-\-metacache\fR \fI[arg]\fR Reinitialize metadata cache .TP \fB\-M\fR \fI<arg>\fR, \fB\-\-modpath\fR \fI<arg>\fR @@ -8,10 +8,10 @@ #define Q_FLAGS "irmM:" COMMON_FLAGS static struct option const q_long_opts[] = { - {"install", no_argument, NULL, 'i'}, - {"reinitialize", no_argument, NULL, 'r'}, - {"metacache", no_argument, NULL, 'm'}, - {"modpath", a_argument, NULL, 'M'}, + {"install", no_argument, NULL, 'i'}, + {"reinitialize", opt_argument, NULL, 'r'}, + {"metacache", opt_argument, NULL, 'm'}, + {"modpath", a_argument, NULL, 'M'}, COMMON_LONG_OPTS }; static const char * const q_opts_help[] = { @@ -84,8 +84,24 @@ int q_main(int argc, char **argv) switch (i) { COMMON_GETOPTS_CASES(q) case 'M': modpath = optarg; break; - case 'm': reinitialize_metacache = 1; break; - case 'r': reinitialize = 1; break; + case 'm': + if (optarg) { + const char *path = initialize_flat(optarg, CACHE_METADATA, true); + if (path) { /* silence warning */ } + IF_DEBUG(free((void *)path)); + reinitialize_metacache = -1; + } else + reinitialize_metacache = 1; + break; + case 'r': + if (optarg) { + const char *path = initialize_flat(optarg, CACHE_EBUILD, true); + if (path) { /* silence warning */ } + IF_DEBUG(free((void *)path)); + reinitialize = -1; + } else + reinitialize = 1; + break; case 'i': install = 1; break; } } @@ -128,8 +144,12 @@ int q_main(int argc, char **argv) return ret; } - if (reinitialize || reinitialize_metacache) + if (reinitialize > 0 || reinitialize_metacache > 0) return 0; + if (reinitialize < 0 || reinitialize_metacache < 0) { + reinitialize = reinitialize_metacache = 0; + return 0; + } if (argc == optind) q_usage(EXIT_FAILURE); if ((func = lookup_applet(argv[optind])) == NULL) diff --git a/repo.postsync/q-reinit b/repo.postsync/q-reinit new file mode 100644 index 00000000..0833c66f --- /dev/null +++ b/repo.postsync/q-reinit @@ -0,0 +1,10 @@ +#!/bin/sh + +repository_name=$1 +repository_path=$3 + +if [ -n "${repository_name}" ]; then + q ${PORTAGE_QUIET:+-q} --reinitialize="${repository_path}" +fi + +: |