From 61197b2ada10f0a94bf144f664593b2beb6f2456 Mon Sep 17 00:00:00 2001 From: Rene Rebe Date: Fri, 26 Dec 2003 00:28:48 +0000 Subject: [PATCH] Added a "check for modified files" option to mine ("-y" for now ...). I know that a: md5sum --check var/adm/md5sums/$pkg is sufficent for the check task - but a statically linked version for rescue situations are a nice-to-have (ehrm yes - I had to solve some stability problems on my iBook in the last days ....). Mine should be the right place for a common package check interface. git-svn-id: http://www.rocklinux.org/svn/rock-linux/trunk@2061 c5f82cb5-29bc-0310-9cd0-bff59a50e3bc --- Documentation/Developers/CHANGELOG-RENE | 3 +- package/base/mine/x-feature-check.patch | 177 ++++++++++++++++++++++++ 2 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 package/base/mine/x-feature-check.patch diff --git a/Documentation/Developers/CHANGELOG-RENE b/Documentation/Developers/CHANGELOG-RENE index 0d4bc2ab7..0f2cdc206 100644 --- a/Documentation/Developers/CHANGELOG-RENE +++ b/Documentation/Developers/CHANGELOG-RENE @@ -2,7 +2,8 @@ *) 2003-12-25 (2.0.0-rc3 - 2.0.0-rc4) - ALSA OSS emulation and no IDESCSI for 2.6 - - added a eject command to kiss + - added an eject command to kiss + - added a "check for modified files" option to mine ("-y" for now ...) *) 2003-12-24 (2.0.0-rc3 - 2.0.0-rc4) diff --git a/package/base/mine/x-feature-check.patch b/package/base/mine/x-feature-check.patch new file mode 100644 index 000000000..b6769af4f --- /dev/null +++ b/package/base/mine/x-feature-check.patch @@ -0,0 +1,177 @@ + +I know that a: +md5sum --check var/adm/md5sums/$pkg + +is sufficent for the check task - but a statically linked version for +rescue situations are a nice-to-have (ehrm yes - I had to solve some stability +problems on my iBook in the last days ....). Mine should be the right place +for a common package check interface. + + - Rene Rebe + +--- mine-0.15/mine.h 2003-09-27 15:20:58.000000000 +0200 ++++ mine-0.15-check/mine.h 2003-12-25 20:00:37.000000000 +0100 +@@ -20,6 +20,8 @@ + #ifndef MINE_H + #define MINE_H + ++extern int gem_check(char * root, char * package); ++ + extern int gem_create(char * varadm, char * tarbz2, + char * package, char * outfile); + +--- mine-0.15/check.c 1970-01-01 01:00:00.000000000 +0100 ++++ mine-0.15-check/check.c 2003-12-25 21:10:25.000000000 +0100 +@@ -0,0 +1,73 @@ ++/* ++ * GEM MINE - The ROCK Linux Package Manager ++ * Copyright (C) 2002-2003 Clifford Wolf and Rene Rebe ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "mine.h" ++#include "md5sum.h" ++ ++extern int check_initialized = 0; ++ ++int gem_check(char * root, char * package) ++{ ++ char buffer[1024]; ++ char *filename; ++ int modified = 0; ++ FILE *f; ++ ++ if ( ! check_initialized ) { ++ md5sum_initdb(root, 0 /* verbose */); ++ check_initialized = 1; ++ } ++ ++ snprintf(buffer, 1024, "%s/var/adm/flists/%s", root, package); ++ f = fopen(buffer, "r"); ++ if ( f == NULL ) { ++ fprintf(stderr, "No such package: %s\n", package); ++ return 1; ++ } ++ ++ while ( fgets(buffer, 1024, f) != NULL ) ++ { ++ strtok(buffer, " \t\n"); ++ filename = strtok(NULL, "\n"); ++ ++ if ( md5sum_check(root, filename) ) { ++ printf("Modified/duplicate " ++ "file: %s\n", filename); ++ modified++; ++ } ++ } ++ ++ fclose(f); ++ ++ if ( modified ) ++ fprintf(stderr, "%d modified file%s of package %s.\n", ++ modified, modified != 1 ? "s" : "", package); ++ return modified == 0; ++} ++ +--- mine-0.15/Makefile 2003-09-27 15:20:58.000000000 +0200 ++++ mine-0.15-check/Makefile 2003-12-25 19:58:20.000000000 +0100 +@@ -21,7 +21,7 @@ + # Mine Itself + # + MINE_VER = 0.15 +-MINE_OBJ = create.o install.o remove.o pkglist.o ++MINE_OBJ = check.o create.o install.o remove.o pkglist.o + MINE_OBJ += showfile.o showkey.o memdb.o md5.o md5sum.o mine.o + MINE_LDFLAGS = -static + +--- mine-0.15-reference/mine.c 2003-09-27 15:20:58.000000000 +0200 ++++ mine-0.15/mine.c 2003-12-26 00:18:25.000000000 +0100 +@@ -32,7 +32,8 @@ + MINE_MODE_REMOVE, + MINE_MODE_PKGLIST, + MINE_MODE_SHOWFILE, +- MINE_MODE_SHOWKEY ++ MINE_MODE_SHOWKEY, ++ MINE_MODE_CHECK + }; + + int mine_mode = MINE_MODE_NONE; +@@ -52,10 +53,11 @@ + " - ROCK Linux Package Management Tool\n" + "Copyright 2002, 2003 Clifford Wolf (GPL'ed)\n" + "\n" +-"Install and remove GEM packages:\n" ++"Install, remove and chek GEM packages:\n" + "\n" + " mine -i [ -t ] [ -v ] [ -f ] [ -R root ] package1.gem [ .. ]\n" + " mine -r [ -t ] [ -v ] [ -f ] [ -R root ] package1 [ package2 [ .. ] ]\n" ++" mine -y [ -R root ] package1 [ package2 [ .. ] ]\n" + "\n" + "Query installed packages or GEM package files:\n" + "\n" +@@ -168,7 +170,7 @@ + } + + while ( (opt = getopt(argc, argv, +- "irqplmcdk:tvfhHR:")) != -1 ) { ++ "iryqplmcdk:tvfhHR:")) != -1 ) { + switch (opt) { + case 'i': + set_mode(MINE_MODE_INSTALL); +@@ -176,7 +178,9 @@ + case 'r': + set_mode(MINE_MODE_REMOVE); + break; +- ++ case 'y': ++ set_mode(MINE_MODE_CHECK); ++ break; + case 'q': + set_mode(MINE_MODE_PKGLIST); + break; +@@ -290,6 +294,10 @@ + argv[optind]); + break; + ++ case MINE_MODE_CHECK: ++ rc = gem_check(mine_root_dir, argv[optind]); ++ break; ++ + case MINE_MODE_PKGLIST: + rc = gem_pkglist(argv[optind]); + break; +@@ -340,6 +348,11 @@ + mine_mode_header_block, + namelist[n]->d_name); + break; ++ ++ ++ case MINE_MODE_CHECK: ++ rc = gem_check(mine_root_dir, namelist[n]->d_name); ++ break; + } + free(namelist[n]); + if ( rc > ret ) ret = rc;