mirror of
git://projects.qi-hardware.com/wernermisc.git
synced 2024-11-15 09:13:43 +02:00
qpkg: sort package version list such that highest comes first
- Makefile (OBJS_qpkg): added fixup.o - fixup.h, fixup.c (sort_versions): sort package versions - qpkg.c (do_fixups, main): do fixups when done gobbling - qpkg.h: need to include id.h to be self-contained - test/sortver: test version sorting
This commit is contained in:
parent
b0c29c4d7a
commit
c05e6d5dbb
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
SHELL = /bin/bash
|
SHELL = /bin/bash
|
||||||
|
|
||||||
OBJS_qpkg = gobble.o id.o prereq.o qpkg.o jrb.o
|
OBJS_qpkg = fixup.o gobble.o id.o prereq.o qpkg.o jrb.o
|
||||||
OBJS_rbtest = rbtest.o jrb.o
|
OBJS_rbtest = rbtest.o jrb.o
|
||||||
OBJS = $(OBJS_qpkg) $(OBJS_rbtest)
|
OBJS = $(OBJS_qpkg) $(OBJS_rbtest)
|
||||||
|
|
||||||
|
42
qpkg/fixup.c
Normal file
42
qpkg/fixup.c
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* fixup.c - Adjust things after parsing is done
|
||||||
|
*
|
||||||
|
* Written 2010 by Werner Almesberger
|
||||||
|
* Copyright 2010 Werner Almesberger
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "jrb.h"
|
||||||
|
|
||||||
|
#include "qpkg.h"
|
||||||
|
#include "fixup.h"
|
||||||
|
|
||||||
|
|
||||||
|
void sort_versions(void)
|
||||||
|
{
|
||||||
|
const struct jrb *n;
|
||||||
|
struct pkg **a, **b;
|
||||||
|
struct pkg *tmp;
|
||||||
|
|
||||||
|
for (n = jrb_first(packages->root); n != jrb_nil(packages->root);
|
||||||
|
n = jrb_next(n))
|
||||||
|
for (a = (struct pkg **) &n->val; *a; a = &(*a)->more)
|
||||||
|
for (b = &(*a)->more; *b;)
|
||||||
|
if (comp_versions((*a)->version,
|
||||||
|
(*b)->version) >= 0)
|
||||||
|
b = &(*b)->more;
|
||||||
|
else {
|
||||||
|
tmp = *a;
|
||||||
|
*a = *b;
|
||||||
|
*b = tmp;
|
||||||
|
tmp = (*a)->more;
|
||||||
|
(*a)->more = (*b)->more;
|
||||||
|
(*b)->more = tmp;
|
||||||
|
}
|
||||||
|
}
|
18
qpkg/fixup.h
Normal file
18
qpkg/fixup.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* fixup.c - Adjust things after parsing is done
|
||||||
|
*
|
||||||
|
* Written 2010 by Werner Almesberger
|
||||||
|
* Copyright 2010 Werner Almesberger
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FIXUP_H
|
||||||
|
#define FIXUP_H
|
||||||
|
|
||||||
|
void sort_versions(void);
|
||||||
|
|
||||||
|
#endif /* !FIXUP_H */
|
@ -20,6 +20,7 @@
|
|||||||
#include "id.h"
|
#include "id.h"
|
||||||
#include "prereq.h"
|
#include "prereq.h"
|
||||||
#include "gobble.h"
|
#include "gobble.h"
|
||||||
|
#include "fixup.h"
|
||||||
#include "qpkg.h"
|
#include "qpkg.h"
|
||||||
|
|
||||||
|
|
||||||
@ -116,6 +117,12 @@ static void find_prereq(const char *name, const char *version)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void do_fixups(void)
|
||||||
|
{
|
||||||
|
sort_versions();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void usage(const char *name)
|
static void usage(const char *name)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
@ -145,6 +152,7 @@ int main(int argc, char **argv)
|
|||||||
if (*argv[arg] == '-')
|
if (*argv[arg] == '-')
|
||||||
usage(*argv);
|
usage(*argv);
|
||||||
if (!strcmp(argv[arg], "list")) {
|
if (!strcmp(argv[arg], "list")) {
|
||||||
|
do_fixups();
|
||||||
switch (argc-arg) {
|
switch (argc-arg) {
|
||||||
case 1:
|
case 1:
|
||||||
list_all_packages();
|
list_all_packages();
|
||||||
@ -156,6 +164,7 @@ int main(int argc, char **argv)
|
|||||||
usage(*argv);
|
usage(*argv);
|
||||||
}
|
}
|
||||||
} else if (!strcmp(argv[arg], "prereq")) {
|
} else if (!strcmp(argv[arg], "prereq")) {
|
||||||
|
do_fixups();
|
||||||
switch (argc-arg) {
|
switch (argc-arg) {
|
||||||
case 2:
|
case 2:
|
||||||
find_prereq(argv[arg+1], NULL);
|
find_prereq(argv[arg+1], NULL);
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
#ifndef QPKG_H
|
#ifndef QPKG_H
|
||||||
#define QPKG_H
|
#define QPKG_H
|
||||||
|
|
||||||
|
#include "id.h"
|
||||||
|
|
||||||
|
|
||||||
enum flags {
|
enum flags {
|
||||||
/* parse-time flags */
|
/* parse-time flags */
|
||||||
QPKG_INSTALLED = 1 << 0, /* installed on target */
|
QPKG_INSTALLED = 1 << 0, /* installed on target */
|
||||||
|
146
qpkg/test/sortver
Executable file
146
qpkg/test/sortver
Executable file
@ -0,0 +1,146 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. ./Common
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
qpkg "sort versions 1 2 3" list <<EOF
|
||||||
|
Package: X
|
||||||
|
Version: 1
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_1
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 2
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_2
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 3
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_3
|
||||||
|
EOF
|
||||||
|
expect <<EOF
|
||||||
|
X (3) +++
|
||||||
|
X (2) +++
|
||||||
|
X (1)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
qpkg "sort versions 1 3 2" list <<EOF
|
||||||
|
Package: X
|
||||||
|
Version: 1
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_1
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 3
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_3
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 2
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_2
|
||||||
|
EOF
|
||||||
|
expect <<EOF
|
||||||
|
X (3) +++
|
||||||
|
X (2) +++
|
||||||
|
X (1)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
qpkg "sort versions 2 1 3" list <<EOF
|
||||||
|
Package: X
|
||||||
|
Version: 2
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_2
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 1
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_1
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 3
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_3
|
||||||
|
EOF
|
||||||
|
expect <<EOF
|
||||||
|
X (3) +++
|
||||||
|
X (2) +++
|
||||||
|
X (1)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
qpkg "sort versions 2 3 1" list <<EOF
|
||||||
|
Package: X
|
||||||
|
Version: 2
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_2
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 3
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_3
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 1
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_1
|
||||||
|
EOF
|
||||||
|
expect <<EOF
|
||||||
|
X (3) +++
|
||||||
|
X (2) +++
|
||||||
|
X (1)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
qpkg "sort versions 3 1 2" list <<EOF
|
||||||
|
Package: X
|
||||||
|
Version: 3
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_3
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 1
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_1
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 2
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_2
|
||||||
|
EOF
|
||||||
|
expect <<EOF
|
||||||
|
X (3) +++
|
||||||
|
X (2) +++
|
||||||
|
X (1)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
qpkg "sort versions 3 2 1" list <<EOF
|
||||||
|
Package: X
|
||||||
|
Version: 3
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_3
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 2
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_2
|
||||||
|
|
||||||
|
Package: X
|
||||||
|
Version: 1
|
||||||
|
Architecture: test
|
||||||
|
Filename: X_1
|
||||||
|
EOF
|
||||||
|
expect <<EOF
|
||||||
|
X (3) +++
|
||||||
|
X (2) +++
|
||||||
|
X (1)
|
||||||
|
EOF
|
Loading…
Reference in New Issue
Block a user