[70488] branches/gsoc10-configfiles/base/src
and.damore at macports.org
and.damore at macports.org
Wed Aug 11 04:05:49 PDT 2010
Revision: 70488
http://trac.macports.org/changeset/70488
Author: and.damore at macports.org
Date: 2010-08-11 04:05:46 -0700 (Wed, 11 Aug 2010)
Log Message:
-----------
added "md5sums" command to registry::entry, returns a list of bare md5 checksums
Modified Paths:
--------------
branches/gsoc10-configfiles/base/src/cregistry/entry.c
branches/gsoc10-configfiles/base/src/cregistry/entry.h
branches/gsoc10-configfiles/base/src/registry2.0/entryobj.c
branches/gsoc10-configfiles/base/src/registry2.0/portimage.tcl
Modified: branches/gsoc10-configfiles/base/src/cregistry/entry.c
===================================================================
--- branches/gsoc10-configfiles/base/src/cregistry/entry.c 2010-08-11 09:15:56 UTC (rev 70487)
+++ branches/gsoc10-configfiles/base/src/cregistry/entry.c 2010-08-11 11:05:46 UTC (rev 70488)
@@ -1310,6 +1310,73 @@
}
/**
+ * Gets a list of md5sums owned by the given port.
+ *
+ * TODO: check that the port is active
+ *
+ * @param [in] entry entry to get the list for
+ * @param [out] md5sums a list of md5sums owned by the port
+ * @param [out] errPtr on error, a description of the error that occurred
+ * @return the number of md5sums if success; negative if failure
+ */
+int reg_entry_md5sums(reg_entry* entry, char*** md5sums, reg_error* errPtr) {
+ reg_registry* reg = entry->reg;
+ sqlite3_stmt* stmt = NULL;
+ char* query = "SELECT md5sum FROM registry.files WHERE id=? "
+ "AND active ORDER BY actual_path";
+ if ((sqlite3_prepare(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
+ && (sqlite3_bind_int64(stmt, 1, entry->id) == SQLITE_OK)) {
+ char** result = malloc(10*sizeof(char*));
+ int result_count = 0;
+ int result_space = 10;
+ int r;
+ const char *text;
+ char* element;
+ if (!result) {
+ return -1;
+ }
+ do {
+ r = sqlite3_step(stmt);
+ switch (r) {
+ case SQLITE_ROW:
+ text = (const char*)sqlite3_column_text(stmt, 0);
+ if (text) {
+ element = strdup(text);
+ if (!element || !reg_listcat((void***)&result, &result_count, &result_space, element)) {
+ r = SQLITE_ERROR;
+ }
+ }
+ break;
+ case SQLITE_DONE:
+ case SQLITE_BUSY:
+ break;
+ default:
+ reg_sqlite_error(reg->db, errPtr, query);
+ break;
+ }
+ } while (r == SQLITE_ROW || r == SQLITE_BUSY);
+ sqlite3_finalize(stmt);
+ if (r == SQLITE_DONE) {
+ *md5sums = result;
+ return result_count;
+ } else {
+ int i;
+ for (i=0; i<result_count; i++) {
+ free(result[i]);
+ }
+ free(result);
+ return -1;
+ }
+ } else {
+ reg_sqlite_error(reg->db, errPtr, query);
+ if (stmt) {
+ sqlite3_finalize(stmt);
+ }
+ return -1;
+ }
+}
+
+/**
* Sets an entry's files as being active in the filesystem. This entry will be
* subsequently returned by `reg_entry_owner` on those files' path. If all files
* are being activated as the names they are in the registry, then `as_files`
Modified: branches/gsoc10-configfiles/base/src/cregistry/entry.h
===================================================================
--- branches/gsoc10-configfiles/base/src/cregistry/entry.h 2010-08-11 09:15:56 UTC (rev 70487)
+++ branches/gsoc10-configfiles/base/src/cregistry/entry.h 2010-08-11 11:05:46 UTC (rev 70488)
@@ -84,11 +84,14 @@
int reg_entry_files(reg_entry* entry, char*** files, reg_error* errPtr);
int reg_entry_imagefiles(reg_entry* entry, char*** files, reg_error* errPtr);
+
int reg_entry_files_with_md5(
reg_entry* entry, char*** files, char*** md5sums, reg_error* errPtr);
int reg_entry_imagefiles_with_md5(
reg_entry* entry, char*** files, char*** md5sums, reg_error* errPtr);
-
+
+int reg_entry_md5sums(reg_entry* entry, char*** md5sums, reg_error* errPtr);
+
int reg_entry_activate(reg_entry* entry, char** files, char** as_files,
int file_count, reg_error* errPtr);
int reg_entry_deactivate(reg_entry* entry, char** files, int file_count,
Modified: branches/gsoc10-configfiles/base/src/registry2.0/entryobj.c
===================================================================
--- branches/gsoc10-configfiles/base/src/registry2.0/entryobj.c 2010-08-11 09:15:56 UTC (rev 70487)
+++ branches/gsoc10-configfiles/base/src/registry2.0/entryobj.c 2010-08-11 11:05:46 UTC (rev 70488)
@@ -404,6 +404,40 @@
}
}
+static int entry_obj_md5sums(Tcl_Interp* interp, reg_entry* entry, int objc,
+ Tcl_Obj* CONST objv[]) {
+ reg_registry* reg = registry_for(interp, reg_attached);
+ if (objc != 2) {
+ Tcl_WrongNumArgs(interp, 1, objv, "md5sums");
+ return TCL_ERROR;
+ } else if (reg == NULL) {
+ return TCL_ERROR;
+ } else {
+ char** md5sums;
+ reg_error error;
+ int file_count = reg_entry_md5sums(entry, &md5sums, &error);
+ int i;
+ if (file_count >= 0) {
+ Tcl_Obj** objs;
+ int retval = TCL_ERROR;
+ if (list_string_to_obj(&objs, md5sums, file_count, &error)) {
+ Tcl_Obj* result = Tcl_NewListObj(file_count, objs);
+ Tcl_SetObjResult(interp, result);
+ free(objs);
+ retval = TCL_OK;
+ } else {
+ retval = registry_failed(interp, &error);
+ }
+ for (i=0; i<file_count; i++) {
+ free(md5sums[i]);
+ }
+ free(md5sums);
+ return retval;
+ }
+ return registry_failed(interp, &error);
+ }
+}
+
static int entry_obj_activate(Tcl_Interp* interp, reg_entry* entry, int objc,
Tcl_Obj* CONST objv[]) {
reg_registry* reg = registry_for(interp, reg_attached);
@@ -569,6 +603,7 @@
{ "files_with_md5", entry_obj_files_with_md5 },
{ "imagefiles", entry_obj_imagefiles },
{ "imagefiles_with_md5", entry_obj_imagefiles_with_md5 },
+ { "md5sums", entry_obj_md5sums },
{ "activate", entry_obj_activate },
{ "deactivate", entry_obj_filemap },
/* dep map */
Modified: branches/gsoc10-configfiles/base/src/registry2.0/portimage.tcl
===================================================================
--- branches/gsoc10-configfiles/base/src/registry2.0/portimage.tcl 2010-08-11 09:15:56 UTC (rev 70487)
+++ branches/gsoc10-configfiles/base/src/registry2.0/portimage.tcl 2010-08-11 11:05:46 UTC (rev 70488)
@@ -216,7 +216,6 @@
}
}
- #branch on sqlite-registry-db or old–flatfile
if {$use_reg2} {
if { [string equal $name ""] } {
throw registry::image-error "Registry error: Please specify the name of the port."
@@ -258,7 +257,6 @@
ui_msg "$UI_PREFIX [format [msgcat::mc "Deactivating %s"] $name]"
}
- #here we go -
if {$use_reg2} {
if { ![string equal [$requested installtype] "image"] } {
return -code error "Image error: ${name} @${specifier} not installed as an image."
@@ -699,7 +697,7 @@
variable use_reg2
set files [list]
- foreach file $imagefiles {
+ foreach file $imagefiles {
if { [file exists $file] || (![catch {file type $file}] && [file type $file] == "link") } {
# Normalize the file path to avoid removing the intermediate
# symlinks (remove the empty directories instead)
@@ -736,7 +734,7 @@
$port deactivate $imagefiles
foreach file $files {
if {[is_config_file $file]} {
- #puts "GSOC: $file is config file, skipping for now"
+ puts "GSOC: $file is config file"
#continue
}
_deactivate_file $file
@@ -751,7 +749,7 @@
proc is_config_file {filename} {
#replace hardcoded path with $config_path from portmain.tcl, what namespace does "option" add options to?
- if {[string match ${::macports::prefix} "$filename"]} {return 1} {return 0}
+ if {[string match ${::macports::prefix}/etc "$filename"]} {return 1} {return 0}
}
# End of portimage namespace
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20100811/e590b599/attachment.html>
More information about the macports-changes
mailing list