Browse Source

Stefan Fiedler:


			
			
				rocklinux
			
			
		
Stefan Fiedler 18 years ago
parent
commit
92adc0772f
2 changed files with 159 additions and 54 deletions
  1. +110
    -9
      misc/tools-source/config_helper.c
  2. +49
    -45
      scripts/config.func

+ 110
- 9
misc/tools-source/config_helper.c

@ -54,6 +54,8 @@ struct package {
char *alias;
char *version;
char *prefix;
/* flags must end with a space character
(for easily searching for flags). */
char *flags;
struct package *next;
};
@ -98,8 +100,19 @@ int read_pkg_list(const char *file) {
pkg_tmp->repository = strdup(tok);
tok = strtok(0, " ");
pkg_tmp->name = strdup(tok);
pkg_tmp->alias = strdup(tok);
char *c = strchr(tok, '=');
if (c)
{
pkg_tmp->name = malloc(c-tok+1);
pkg_tmp->name[c-tok] = '\0';
strncpy(pkg_tmp->name, tok, c-tok);
pkg_tmp->alias = strdup(c+1);
}
else
{
pkg_tmp->name = strdup(tok);
pkg_tmp->alias = strdup(tok);
}
tok = strtok(0, " ");
pkg_tmp->version = strdup(tok);
@ -108,7 +121,7 @@ int read_pkg_list(const char *file) {
pkg_tmp->prefix = strdup(tok);
tok = strtok(0, "\n");
tok[strlen(tok)-2] = 0;
tok[strlen(tok)-1] = 0;
pkg_tmp->flags = strdup(tok);
if ( !package_list )
@ -134,7 +147,7 @@ int write_pkg_list(const char *file) {
fprintf(f, " %s %s %s", pkg->prio, pkg->repository, pkg->name);
if (strcmp(pkg->name, pkg->alias))
fprintf(f, "=%s", pkg->alias);
fprintf(f, " %s %s %s 0\n", pkg->version, pkg->prefix, pkg->flags);
fprintf(f, " %s %s %s0\n", pkg->version, pkg->prefix, pkg->flags);
pkg = pkg->next;
}
@ -208,6 +221,91 @@ int pkgswitch(int mode, char **args)
return 0;
}
int pkgfork(char *pkgname, char *xpkg, char** opt)
{
struct package *fork, *pkg;
int i, k;
for (pkg = package_list; pkg; pkg = pkg->next)
if (!strcmp(pkg->alias, pkgname))
break;
if (!pkg) return 1;
fork = calloc(1, sizeof(struct package));
fork->status = pkg->status;
for (k=0; k<10; k++)
fork->stages[k] = pkg->stages[k];
fork->prio = strdup(pkg->prio);
fork->repository = strdup(pkg->repository);
fork->name = strdup(pkgname);
fork->alias = strdup(xpkg);
fork->version = strdup(pkg->version);
fork->prefix = strdup(pkg->prefix);
fork->flags = strdup(pkg->flags);
fork->next = pkg->next;
pkg->next = fork;
for (i=0; *opt[i] && *opt[i+1]; i+=2)
{
if (!strcmp(opt[i], "status"))
fork->status= opt[i+1][0] == 'X';
else if (!strcmp(opt[i], "stages"))
for (k=0; k<10; k++)
fork->stages[k] = opt[i+1][k] != '-' ? opt[i+1][k] : 0;
else if (!strcmp(opt[i], "priority"))
{
free(fork->prio);
fork->prio = strdup(opt[i+1]);
}
else if (!strcmp(opt[i], "version"))
{
free(fork->version);
fork->version = strdup(opt[i+1]);
}
else if (!strcmp(opt[i], "prefix"))
{
free(fork->prefix);
fork->prefix = strdup(opt[+1]);
}
else if (!strcmp(opt[i], "flag"))
{
char buf[512], flag[512];
snprintf(flag, 512, " %s ", opt[i+1]);
if (! strstr(fork->flags, flag))
{
free(fork->flags);
snprintf(buf, 512, "%s%s ", pkg->flags, opt[i+1]);
fork->flags = strdup(buf);
}
}
else if (!strcmp(opt[i], "unflag"))
{
char buf[512], flag[512];
snprintf(flag, 512, " %s ", opt[i+1]);
char *flagstart = strstr(fork->flags, flag);
if (flagstart)
{
int len = flagstart - fork->flags + 1;
strncpy(buf, fork->flags, len);
strncpy(buf+len, flagstart+strlen(flag), 512-len);
free(fork->flags);
fork->flags = strdup(buf);
}
}
}
return 0;
}
int cfghlp_builtin(WORD_LIST *list)
{
char *args[10];
@ -224,21 +322,24 @@ int cfghlp_builtin(WORD_LIST *list)
if (!strcmp(args[0],"pkg_in"))
return read_pkg_list(args[1]);
if (!strcmp(args[0],"pkg_out"))
else if (!strcmp(args[0],"pkg_out"))
return write_pkg_list(args[1]);
if (!strcmp(args[0],"pkgcheck"))
else if (!strcmp(args[0],"pkgcheck"))
return pkgcheck(args[1], args[2]);
if (!strcmp(args[0],"pkgremove"))
else if (!strcmp(args[0],"pkgremove"))
return pkgswitch(0, args+1);
if (!strcmp(args[0],"pkgenable"))
else if (!strcmp(args[0],"pkgenable"))
return pkgswitch(1, args+1);
if (!strcmp(args[0],"pkgdisable"))
else if (!strcmp(args[0],"pkgdisable"))
return pkgswitch(2, args+1);
else if (!strcmp(args[0],"pkgfork"))
return pkgfork(args[1], args[2], args+3);
return 1;
}

+ 49
- 45
scripts/config.func

@ -101,6 +101,50 @@ then
bprof pkgcheck stop
return $ret
}
#
# pkgfork <origpkg> <newpkg> <name1> <value1> <name2> <value2> ..
#
# Names:
# status X / O
# stages 012--5---9
# priority 115.000
# version 0.9.26
# prefix /opt/foobar
# flag CORE
# unflag CORE
#
pkgfork() {
local script="\$5==\"$1\" {print;\$5=\"$1=$2\";"
shift; shift;
while [ -n "$1" ]; do
case "$1" in
status)
script="$script \$1=\"$2\";"
;;
stages)
script="$script \$2=\"$2\";"
;;
priority)
script="$script \$3=\"$2\";"
;;
version)
script="$script \$6=\"$2\";"
;;
prefix)
script="$script \$7=\"$2\";"
;;
flag)
script="$script sub(\" 0\$\", \" $2 0\");"
;;
unflag)
script="$script sub(\" $2 \", \" \");"
;;
esac
shift; shift;
done
script="$script} {print;}"
pkgfilter "awk" "--" "$script"
}
else
pkgin() { cfghlp pkg_in config/$config.$swpid/packages; }
pkgout() { cfghlp pkg_out config/$config.$swpid/packages ; }
@ -132,53 +176,13 @@ else
bprof pkgcheck stop
return $ret
}
pkgfork() {
bprof pkgfork start
cfghlp pkgfork "$@"
bprof pkgfork stop
}
fi
#
# pkgfork <origpkg> <newpkg> <name1> <value1> <name2> <value2> ..
#
# Names:
# status X / O
# stages 012--5---9
# priority 115.000
# version 0.9.26
# prefix /opt/foobar
# flag CORE
# unflag CORE
#
pkgfork() {
local script="\$5==\"$1\" {print;\$5=\"$1=$2\";"
shift; shift;
while [ -n "$1" ]; do
case "$1" in
status)
script="$script \$1=\"$2\";"
;;
stages)
script="$script \$2=\"$2\";"
;;
priority)
script="$script \$3=\"$2\";"
;;
version)
script="$script \$6=\"$2\";"
;;
prefix)
script="$script \$7=\"$2\";"
;;
flag)
script="$script sub(\" 0\$\", \" $2 0\");"
;;
unflag)
script="$script sub(\" $2 \", \" \");"
;;
esac
shift; shift;
done
script="$script} {print;}"
pkgfilter "awk" "--" "$script"
}
comment() {
bprof comment start
if [ $ROCKCFG_EXPERT -eq 1 -o $expert -eq 0 ] && \

Loading…
Cancel
Save