<pre style='margin:0'>
Umesh Singla (umeshksingla) pushed a commit to branch gsoc17-migrate
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/34a2162dfb43d1bb2757b72d2edfd699327980d8">https://github.com/macports/macports-base/commit/34a2162dfb43d1bb2757b72d2edfd699327980d8</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 34a2162dfb43d1bb2757b72d2edfd699327980d8
</span>Author: Umesh Singla <umeshksingla@macports.org>
AuthorDate: Fri Aug 18 07:24:54 2017 +0530

<span style='display:block; white-space:pre;color:#404040;'>    remove entry-to-snapshot migration errors
</span>---
 src/cregistry/entry.h        |  1 +
 src/cregistry/snapshot.c     | 38 ++++++++++++++++++++------------------
 src/cregistry/snapshot.h     |  9 +++++----
 src/macports1.0/migrate.tcl  |  3 ++-
 src/macports1.0/snapshot.tcl |  8 ++------
 src/registry2.0/snapshot.c   | 20 ++++++++++----------
 6 files changed, 40 insertions(+), 39 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/entry.h b/src/cregistry/entry.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 756a774..89a248b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/entry.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/entry.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -33,6 +33,7 @@
</span> #endif
 
 #include "registry.h"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "portgroup.h"
</span> 
 #include <sqlite3.h>
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/snapshot.c b/src/cregistry/snapshot.c
</span><span style='display:block; white-space:pre;color:#808080;'>index a6fdef7..c3934e3 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/snapshot.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/snapshot.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -30,6 +30,7 @@
</span> #include <config.h>
 #endif
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "entry.h"
</span> #include "snapshot.h"
 #include "registry.h"
 #include "sql.h"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -67,12 +68,12 @@ int get_parsed_variants(char* variants_str, variant* all_variants, char* delim,
</span>     return 0;
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-reg_entry* reg_snapshot_create(reg_registry* reg, char* note, reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+reg_snapshot* reg_snapshot_create(reg_registry* reg, char* note, reg_error* errPtr) {
</span> 
     printf("inside cregsitry sn cr\n");
 
     sqlite3_stmt* stmt = NULL;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    reg_entry* entry = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    reg_snapshot* snapshot = NULL;
</span>     char* query = "INSERT INTO registry.snapshots (note) VALUES (?)";
 
     if ((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -83,16 +84,16 @@ reg_entry* reg_snapshot_create(reg_registry* reg, char* note, reg_error* errPtr)
</span>             r = sqlite3_step(stmt);
             switch (r) {
                 case SQLITE_DONE:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    entry = malloc(sizeof(reg_entry));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    if (entry) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        entry->id = sqlite3_last_insert_rowid(reg->db);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        entry->reg = reg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        entry->proc = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    snapshot = malloc(sizeof(reg_snapshot));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    if (snapshot) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        snapshot->id = sqlite3_last_insert_rowid(reg->db);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        snapshot->reg = reg;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        snapshot->proc = NULL;
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        printf("snapshot id: %lld\n", entry->id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        printf("snapshot id: %lld\n", snapshot->id);
</span> 
                         // TODO: move this functions to a different file
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        int ports_saved = snapshot_store_ports(reg, entry, errPtr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        int ports_saved = snapshot_store_ports(reg, snapshot, errPtr);
</span> 
                         switch (ports_saved) {
                             case 1:
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -119,10 +120,10 @@ reg_entry* reg_snapshot_create(reg_registry* reg, char* note, reg_error* errPtr)
</span>         sqlite3_finalize(stmt);
     }
     printf("done with the snapshot\n");
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    return entry;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return snapshot;
</span> }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-int snapshot_store_ports(reg_registry* reg, reg_entry* snap_entry, reg_error* errPtr){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int snapshot_store_ports(reg_registry* reg, reg_snapshot* snapshot, reg_error* errPtr){
</span>     reg_entry** entries;
     reg_error error;
     int i, entry_count;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -151,7 +152,7 @@ int snapshot_store_ports(reg_registry* reg, reg_entry* snap_entry, reg_error* er
</span>                     "VALUES (?, ?, ?, ?)";
 
                 if ((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        && (sqlitse3_bind_int64(stmt, 1, snap_entry->id) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        && (sqlite3_bind_int64(stmt, 1, snapshot->id) == SQLITE_OK)
</span>                         && (sqlite3_bind_text(stmt, 2, port_name, -1, SQLITE_STATIC) == SQLITE_OK)
                         && (sqlite3_bind_int64(stmt, 3, atoi(requested)) == SQLITE_OK)
                         && (sqlite3_bind_text(stmt, 4, state, -1, SQLITE_STATIC) == SQLITE_OK)) {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -286,13 +287,14 @@ int snapshot_store_port_variants(reg_registry* reg, reg_entry* port_entry,
</span> 
 char* reg_snapshot_get_id(reg_registry* reg, reg_error* errPtr) {
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    printf("inside cregistry get snapshot..\n");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sqlite3_stmt* stmt = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    reg_entry* entry = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    //printf("inside cregistry get snapshot..\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    //sqlite3_stmt* stmt = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    //reg_entry* entry = NULL;
</span>     char* query = "SELECT id FROM registry.snapshots ORDER BY id DESC LIMIT 1";
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    return query;
</span> }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-int reg_snapshot_get(reg_registry* reg, char* id, reg_snapshot* snapshot, reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int reg_snapshot_get(reg_registry* reg, sqlite_int64 id, reg_snapshot* snapshot, reg_error* errPtr) {
</span> 
     printf("inside cregistry get snapshot..\n");
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -304,7 +306,7 @@ int reg_snapshot_get(reg_registry* reg, char* id, reg_snapshot* snapshot, reg_er
</span>     const char* state;
 
     if ((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        && (sqlite3_bind_int64(stmt, 1, (sqlite_int64)id) == SQLITE_OK )) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        && (sqlite3_bind_int64(stmt, 1, id) == SQLITE_OK )) {
</span> 
         port** result = malloc(10 * sizeof(port*));
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -377,7 +379,7 @@ int reg_snapshot_get(reg_registry* reg, char* id, reg_snapshot* snapshot, reg_er
</span>             s->id = NULL;
             s->note = NULL;
             s->proc = NULL;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            s->ports = result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            s->ports = *result;
</span>             *snapshot = *s;
 
             return result_count;
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/snapshot.h b/src/cregistry/snapshot.h
</span><span style='display:block; white-space:pre;color:#808080;'>index 30fe8ec..6ea9325 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/snapshot.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/snapshot.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -33,6 +33,7 @@
</span> #endif
 
 #include "registry.h"
<span style='display:block; white-space:pre;background:#e0ffe0;'>+#include "entry.h"
</span> 
 #include <sqlite3.h>
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -49,7 +50,7 @@ typedef struct {
</span> } port;
 
 typedef struct {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    char* id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    sqlite_int64 id; /* rowid in database */
</span>     char* note;
     port* ports;
     reg_registry* reg; /* associated registry */
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -59,15 +60,15 @@ typedef struct {
</span> int get_parsed_variants(char* variants_str, variant* all_variants,
     char* delim, int* variant_count);
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-reg_entry* reg_snapshot_create(reg_registry* reg, char* note,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+reg_snapshot* reg_snapshot_create(reg_registry* reg, char* note,
</span>         reg_error* errPtr);
 char* reg_snapshot_get_id(reg_registry* reg, reg_error* errPtr);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-int reg_snapshot_get(reg_registry* reg, char* id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int reg_snapshot_get(reg_registry* reg, sqlite_int64 id,
</span>         reg_snapshot* snapshot, reg_error* errPtr);
 int reg_snapshot_port_variants_get(reg_registry* reg,
         sqlite_int64 snapshot_port_id, variant** variants, reg_error* errPtr);
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-int snapshot_store_ports(reg_registry* reg, reg_entry* entry,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int snapshot_store_ports(reg_registry* reg, reg_snapshot* snapshot,
</span>         reg_error* errPtr);
 int snapshot_store_port_variants(reg_registry* reg, reg_entry* port_entry,
         int snapshot_ports_id, reg_error* errPtr);
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/migrate.tcl b/src/macports1.0/migrate.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 2086441..5f68bac 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/migrate.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/migrate.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -40,7 +40,8 @@ namespace eval migrate {
</span> 
 
         # create a snapshot
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # set snapshot snapshot::main
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set snapshot snapshot::main
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return 0
</span> 
         # fetch ports and variants for this snapshot
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/macports1.0/snapshot.tcl b/src/macports1.0/snapshot.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 981fef5..83ca6ea 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/macports1.0/snapshot.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/macports1.0/snapshot.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -42,13 +42,9 @@ namespace eval snapshot {
</span>             puts $port
         }
         puts
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set snapshot [registry::entry create_snapshot "test snapshot"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set snapshot [registry::snapshot create "test snapshot"]
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts $snapshot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts [$snapshot name]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts [$snapshot created_at]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return $snapshot
</span>     }
 
     proc all_snapshots {opts} {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/snapshot.c b/src/registry2.0/snapshot.c
</span><span style='display:block; white-space:pre;color:#808080;'>index e316327..ebf6680 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/snapshot.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/snapshot.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -81,10 +81,10 @@ static int create_snapshot(Tcl_Interp* interp, int objc, Tcl_Obj* CONST objv[])
</span>         char* note = Tcl_GetString(objv[2]);
         reg_error error;
         /* may be a new datatype for snapshot */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        reg_entry* new_snaphot = reg_snapshot_create(reg, note, &error);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reg_snapshot* new_snaphot = reg_snapshot_create(reg, note, &error);
</span>         if (new_snaphot != NULL) {
             Tcl_Obj* result;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (entry_to_obj(interp, &result, new_snaphot, NULL, &error)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if (snapshot_to_obj(interp, &result, new_snaphot, NULL, &error)) {
</span>                 Tcl_SetObjResult(interp, result);
                 return TCL_OK;
             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -93,24 +93,24 @@ static int create_snapshot(Tcl_Interp* interp, int objc, Tcl_Obj* CONST objv[])
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-static int get_snapshot(Tcl_Interp* interp, int objc, Tcl_Obj* CONST objv[]) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+static int get_snapshot_by_id(Tcl_Interp* interp, int objc, Tcl_Obj* CONST objv[]) {
</span> 
     printf("getting snapshot\n");
 
     reg_registry* reg = registry_for(interp, reg_attached);
     if (objc > 3) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 2, objv, "get_snapshot ?snapshot_id?");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Tcl_WrongNumArgs(interp, 2, objv, "get_by_id ?snapshot_id?");
</span>         return TCL_ERROR;
     } else if (reg == NULL) {
         return TCL_ERROR;
     } else {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        char* id = Tcl_GetString(objv[2]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        sqlite_int64 id = atoll(Tcl_GetString(objv[2]));
</span>         reg_error error;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        reg_snapshot* snapshot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int port_count = reg_snapshot_get(reg, id, &snapshot, &error);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reg_snapshot* snapshot = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        int port_count = reg_snapshot_get(reg, id, snapshot, &error);
</span>         if (snapshot != NULL && port_count >= 0) {
             Tcl_Obj* resultObj;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (entry_to_obj(interp, &resultObj, snapshot, NULL, &error)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if (snapshot_to_obj(interp, &resultObj, snapshot, NULL, &error)) {
</span>                 Tcl_SetObjResult(interp, resultObj);
                 return TCL_OK;
             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -127,7 +127,7 @@ typedef struct {
</span> static snapshot_cmd_type snapshot_cmds[] = {
     /* Global commands */
     { "create", create_snapshot},
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    { "get", get_snapshot},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    { "get_by_id", get_snapshot_by_id},
</span>     { NULL, NULL }
 };
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -151,4 +151,4 @@ int snapshot_cmd(ClientData clientData UNUSED, Tcl_Interp* interp, int objc,
</span>         return cmd->function(interp, objc, objv);
     }
     return TCL_ERROR;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span>\ No newline at end of file
<span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span></pre><pre style='margin:0'>

</pre>