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

</pre>
<p><a href="https://github.com/macports/macports-base/commit/7f6be10dde87f8448e885d553ff9454df397c801">https://github.com/macports/macports-base/commit/7f6be10dde87f8448e885d553ff9454df397c801</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 7f6be10dde87f8448e885d553ff9454df397c801
</span>Author: Umesh Singla <umeshksingla@macports.org>
AuthorDate: Sun Aug 20 03:50:36 2017 +0530

<span style='display:block; white-space:pre;color:#404040;'>    WIP: debugging migrate fetch functions
</span>---
 src/cregistry/snapshot.c      | 121 +++++++++++++++++++++++-------------------
 src/cregistry/snapshot.h      |   6 +--
 src/macports1.0/migrate.tcl   |   6 ++-
 src/macports1.0/snapshot.tcl  |  16 ++++--
 src/registry2.0/snapshot.c    |  48 ++++++++---------
 src/registry2.0/snapshotobj.c |  31 +++++++----
 src/registry2.0/util.c        |  24 +++++++++
 7 files changed, 153 insertions(+), 99 deletions(-)

<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 9b3f717..96f4de9 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;'>@@ -84,7 +84,7 @@ reg_snapshot* reg_snapshot_create(reg_registry* reg, char* note, reg_error* errP
</span>             r = sqlite3_step(stmt);
             switch (r) {
                 case SQLITE_DONE:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    snapshot = malloc(sizeof(reg_snapshot));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    snapshot = (reg_snapshot*)malloc(sizeof(reg_snapshot));
</span>                     if (snapshot) {
                         snapshot->id = sqlite3_last_insert_rowid(reg->db);
                         snapshot->reg = reg;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -161,7 +161,7 @@ int snapshot_store_ports(reg_registry* reg, reg_snapshot* snapshot, reg_error* e
</span>                         switch (r) {
                             case SQLITE_DONE:
                                 // store variants for entries[i]
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                                entry = malloc(sizeof(reg_entry));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                entry = (reg_entry*)malloc(sizeof(reg_entry));
</span>                                 if (entry) {
                                     entry->id = sqlite3_last_insert_rowid(reg->db);
                                     entry->reg = reg;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -283,19 +283,10 @@ int snapshot_store_port_variants(reg_registry* reg, reg_entry* port_entry,
</span>     return result;
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-char* reg_snapshot_get_id(reg_registry* reg, reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><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:#ffe0e0;'>-    char* query = "SELECT id FROM registry.snapshots ORDER BY id DESC LIMIT 1";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return query;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int reg_snapshot_get(reg_registry* reg, sqlite_int64 id, reg_snapshot* snapshot, reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int reg_snapshot_get(reg_snapshot* snapshot, port*** ports, reg_error* errPtr) {
</span> 
     printf("inside cregistry get snapshot..\n");
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    reg_registry* reg = snapshot->reg;
</span>     sqlite3_stmt* stmt = NULL;
 
     char* query = "SELECT * FROM registry.snapshot_ports WHERE snapshots_id=?";
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -304,9 +295,9 @@ int reg_snapshot_get(reg_registry* reg, sqlite_int64 id, reg_snapshot* snapshot,
</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, id) == SQLITE_OK )) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        && (sqlite3_bind_int64(stmt, 1, snapshot->id) == SQLITE_OK )) {
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        port** result = malloc(10 * sizeof(port*));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        port** result = (port**)malloc(10 * sizeof(port*));
</span> 
         if (!result) {
             return -1;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -316,6 +307,9 @@ int reg_snapshot_get(reg_registry* reg, sqlite_int64 id, reg_snapshot* snapshot,
</span>         int result_space = 10;
         int r;
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        int variant_space = 10;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        variant** variants;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>         sqlite_int64 snapshot_port_id;
         int requested;
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -329,30 +323,43 @@ int reg_snapshot_get(reg_registry* reg, sqlite_int64 id, reg_snapshot* snapshot,
</span>                     requested = (int) sqlite3_column_int64(stmt, 3);
                     state = (const char*) sqlite3_column_text(stmt, 4);
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    port* current_port;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    current_port = (port*) malloc(sizeof(port*));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    port* current_port = (port*) malloc(sizeof(port));
</span>                     if (!current_port) {
                         return -1;
                     }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>                     current_port->name = port_name;
                     current_port->requested = requested;
                     current_port->state = state;
                     current_port->variants = NULL;
 
                     // get variants for the current port using its id
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    variant* variants;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    int variant_count = reg_snapshot_port_variants_get(reg, snapshot_port_id, &variants, errPtr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    printf("\ncurrently on:: %s\n", port_name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    //variant* variants;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    variants = (variant**) malloc(variant_space * sizeof(variant*));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    
</span>                     if (!variants) {
                         return -1;
                     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                    int variant_count = reg_snapshot_port_variants_get(reg, snapshot_port_id, &variants, errPtr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>                     if (variant_count > 0) {
                         current_port->variants = variants;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                        printf("v n a m e: %s\n", variants[0]->variant_name);
</span>                     }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                    // result[result_count++] = current_port;
</span> 
                     if (!reg_listcat((void***)&result, &result_count, &result_space, current_port)) {
                             r = SQLITE_ERROR;
                     }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                    int i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    for (i=0; i < variant_count; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        free(variants[i]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    free(variants);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    variants = NULL;
</span>                     break;
                 case SQLITE_DONE:
                     break;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -367,18 +374,12 @@ int reg_snapshot_get(reg_registry* reg, sqlite_int64 id, reg_snapshot* snapshot,
</span>         sqlite3_finalize(stmt);
 
         if (r == SQLITE_DONE) {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+            printf("... reached here ...\n");
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            reg_snapshot* s = malloc(sizeof(reg_snapshot*));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (!s) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return -1;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            s->id = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            s->note = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            s->proc = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            s->ports = *result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            *snapshot = *s;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            *ports = result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            //printf("size of ' %s ' \n", (const char*) result[0]->name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            printf("size of ' %d' \n", (*(*ports + 0))->requested);
</span> 
             return result_count;
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -398,7 +399,7 @@ int reg_snapshot_get(reg_registry* reg, sqlite_int64 id, reg_snapshot* snapshot,
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-int reg_snapshot_port_variants_get(reg_registry* reg, sqlite_int64 snapshot_port_id, variant** variants, reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int reg_snapshot_port_variants_get(reg_registry* reg, sqlite_int64 snapshot_port_id, variant*** variants, reg_error* errPtr) {
</span> 
     printf("inside getting variants\n");
     sqlite3_stmt* stmt = NULL;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -408,16 +409,15 @@ int reg_snapshot_port_variants_get(reg_registry* reg, sqlite_int64 snapshot_port
</span>     if ((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
         && (sqlite3_bind_int64(stmt, 1, snapshot_port_id) == SQLITE_OK )) {
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        variant* result = malloc(10 * sizeof(variant));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        int result_count = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        int result_space = 10;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        int r;
</span> 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        variant** result = (variant**)malloc(result_space * sizeof(variant*));
</span>         if (!result) {
             return -1;
         }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        int result_count = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int result_space = 10;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        int r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>         const char* variant_name;
         const char* variant_sign;
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -426,10 +426,14 @@ int reg_snapshot_port_variants_get(reg_registry* reg, sqlite_int64 snapshot_port
</span>             switch (r) {
                 case SQLITE_ROW:
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    variant_name = sqlite3_column_text(stmt, 2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    variant_sign = sqlite3_column_text(stmt, 3);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    printf("getting the variant\n");
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    variant* element = malloc(10 * sizeof(variant));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    variant_name = (const char*)  sqlite3_column_text(stmt, 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    printf("vname: %s\n", variant_name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    variant_sign = (const char*) sqlite3_column_text(stmt, 3);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    printf("vsign: %s\n", variant_sign);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    variant* element = (variant*)malloc(sizeof(variant));
</span> 
                     if (!element) {
                         return -1;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -451,20 +455,27 @@ int reg_snapshot_port_variants_get(reg_registry* reg, sqlite_int64 snapshot_port
</span>             }
         } while (r == SQLITE_ROW || r == SQLITE_BUSY);
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        sqlite3_finalize(stmt);
</span>         if (r == SQLITE_DONE) {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+            printf("eveyrhitn done 1\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            printf("varint rc: %d\n", result_count);
</span>             *variants = result;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+            // if (result_count > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            //     variant v = *(variants + result_count - 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            //     printf("s v: %zu\n", sizeof(v));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            //     printf("v n-a m e: %s\n", v.variant_name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            // }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            printf("eveyrhitn done 2\n");
</span>             return result_count;
         } else {
             int i;
             for (i = 0; i < result_count; i++) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                free(result[i].variant_name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                free(result[i].variant_sign);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                free((*(*variants + i))->variant_name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                free((*(*variants + i))->variant_sign);
</span>             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            free(result);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            free(variants);
</span>             return -1;
         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        sqlite3_finalize(stmt);
</span>     } else {
         reg_sqlite_error(reg->db, errPtr, query);
         if (stmt) {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -486,7 +497,7 @@ int reg_snapshot_port_variants_get(reg_registry* reg, sqlite_int64 snapshot_port
</span>  * @return                true if success; false if failure
  */
 int reg_snapshot_propget(reg_snapshot* snapshot, char* key, char** value,
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    reg_error* errPtr) {
</span>     reg_registry* reg = snapshot->reg;
     int result = 0;
     sqlite3_stmt* stmt = NULL;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -544,13 +555,13 @@ int reg_snapshot_propget(reg_snapshot* snapshot, char* key, char** value,
</span>  * @param [out] errPtr    on error, a description of the error that occurred
  * @return                true if success; false if failure
  */
<span style='display:block; white-space:pre;background:#ffe0e0;'>-int reg_snapshot_ports_get(reg_snapshot* snapshot, port** ports,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    reg_registry* reg = snapshot->reg;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int result = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sqlite3_stmt* stmt = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char* query;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    const char *text;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    // TODO: get ports and their variants using snapshot->id as Fk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    return result;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+// int reg_snapshot_ports_get(reg_snapshot* snapshot, port** ports,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     reg_registry* reg = snapshot->reg;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     int result = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     sqlite3_stmt* stmt = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     char* query;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     const char *text;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     // TODO: get ports and their variants using snapshot->id as Fk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+// }
</span><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 a578162..48b5d9c 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;'>@@ -62,11 +62,9 @@ int get_parsed_variants(char* variants_str, variant* all_variants,
</span> 
 reg_snapshot* reg_snapshot_create(reg_registry* reg, char* note,
         reg_error* errPtr);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-char* reg_snapshot_get_id(reg_registry* reg, reg_error* errPtr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-int reg_snapshot_get(reg_registry* reg, sqlite_int64 id,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        reg_snapshot* snapshot, reg_error* errPtr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+int reg_snapshot_get(reg_snapshot* snapshot, port*** ports, reg_error* errPtr);
</span> int reg_snapshot_port_variants_get(reg_registry* reg,
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        sqlite_int64 snapshot_port_id, variant** variants, reg_error* errPtr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        sqlite_int64 snapshot_port_id, variant*** variants, reg_error* errPtr);
</span> 
 int snapshot_store_ports(reg_registry* reg, reg_snapshot* snapshot,
         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 73a7311..73144fe 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;'>@@ -43,6 +43,9 @@ namespace eval migrate {
</span>         # create a snapshot
         set snapshot [snapshot::main $opts]
         puts $snapshot
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts [$snapshot note]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts [$snapshot created_at]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        puts [$snapshot ports]
</span>         puts "here 2"
         return 0
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -94,10 +97,9 @@ namespace eval migrate {
</span> 
     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    proc fetch_latest_snapshot {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    proc fetch_snapshot_details {snapshot} {
</span> 
         return
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span>     }
 
     proc port_dependencies {portName variantInfo} {
<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 1bda3e5..f9ef291 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;'>@@ -21,14 +21,24 @@ namespace eval snapshot {
</span>         #           registry::snapshot
         #
         # TODO:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        # use registry::write wrapper here itself
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # make it return some value
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # 1. use registry::write wrapper here itself
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> 
         puts "here 1-1"
 
         puts "Still being developed"
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set snapshot [registry::snapshot create "test snapshot"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        array set options $opts
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # An option used by user while creating snapshot manually
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # to identify a snapshot, usually followed by `port restore`
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[info exists options(ports_snapshot_note)]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set note ports_snapshot_note
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set note "snapshot created for migration"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set snapshot [registry::snapshot create $note]
</span> 
         return $snapshot
     }
<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 ebf6680..bbeb56c 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;'>@@ -93,31 +93,31 @@ 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_by_id(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> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    printf("getting snapshot\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     printf("getting snapshot\n");
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    reg_registry* reg = registry_for(interp, reg_attached);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (objc > 3) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        Tcl_WrongNumArgs(interp, 2, objv, "get_by_id ?snapshot_id?");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else if (reg == NULL) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        sqlite_int64 id = atoll(Tcl_GetString(objv[2]));
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        reg_error error;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        reg_snapshot* snapshot = NULL;
</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:#ffe0e0;'>-        if (snapshot != NULL && port_count >= 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tcl_Obj* resultObj;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (snapshot_to_obj(interp, &resultObj, snapshot, NULL, &error)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                Tcl_SetObjResult(interp, resultObj);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        return registry_failed(interp, &error);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     reg_registry* reg = registry_for(interp, reg_attached);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     if (objc > 3) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         Tcl_WrongNumArgs(interp, 2, objv, "get_by_id ?snapshot_id?");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     } else if (reg == NULL) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         return TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         sqlite_int64 id = atoll(Tcl_GetString(objv[2]));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         reg_error 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(snapshot, id, snapshot, &error);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         if (snapshot != NULL && port_count >= 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//             Tcl_Obj* resultObj;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//             if (snapshot_to_obj(interp, &resultObj, snapshot, NULL, &error)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//                 Tcl_SetObjResult(interp, resultObj);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//                 return TCL_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//             }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         return registry_failed(interp, &error);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+// }
</span> 
 typedef struct {
     char* name;
<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_by_id", get_snapshot_by_id},
</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;color:#808080;'>diff --git a/src/registry2.0/snapshotobj.c b/src/registry2.0/snapshotobj.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 7c931a4..24f6d00 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/snapshotobj.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/snapshotobj.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -94,22 +94,31 @@ static int snapshot_obj_ports(Tcl_Interp* interp, reg_snapshot* snapshot, int ob
</span>                 == TCL_OK) {
             port** ports;
             reg_error error;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (reg_snapshot_ports_get(snapshot, &ports, &error)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            int port_count = reg_snapshot_get(snapshot, &ports, &error);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if (port_count >= 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                printf("ports fetched\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                printf("port_count: %d\n", port_count);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                //printf("size of ' %zu ' 0 \n", sizeof(ports[1]->name));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                int i;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                for(i=0; i < port_count; i++){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    printf("in it - ");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    printf(".. %d ..  \n ", ports[i]->requested);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    printf("! %s ! \n", ports[i]->state);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return TCL_OK;
</span> 
                 // TODO: correct the below for 'ports', added as a prototype for now
                 // Tcl_Obj** objs;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                // int retval = TCL_ERROR;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                // if (list_entry_to_obj(interp, &objs, entries, entry_count, &error)){
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                //     Tcl_Obj* result = Tcl_NewListObj(entry_count, objs);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                // if (list_snapshot_ports_to_obj(interp, &objs, ports, port_count, &error)){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                //     Tcl_Obj* result = Tcl_NewObj(port_count, objs);
</span>                 //     Tcl_SetObjResult(interp, result);
                 //     free(objs);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                //     retval = TCL_OK;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                // } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                //     retval = registry_failed(interp, &error);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                // }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                free(ports);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                return TCL_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                //     return TCL_OK;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                // } 
</span>             }
             return registry_failed(interp, &error);
         }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/util.c b/src/registry2.0/util.c
</span><span style='display:block; white-space:pre;color:#808080;'>index ba618d8..09210a4 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/util.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/util.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -344,6 +344,30 @@ int snapshot_to_obj(Tcl_Interp* interp, Tcl_Obj** obj, reg_snapshot* snapshot,
</span>     return 1;
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+// int snapshot_port_to_obj(Tcl_Interp* interp, Tcl_Obj** obj, port* port,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         int* lower_bound, reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     if (port->proc == NULL) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         char* name = unique_name(interp, "::registry::snapshot_port", lower_bound);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         if (!name) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//             return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         if (!set_snapshot_port(interp, name, snapshot, errPtr)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//             free(name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//             return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//         free(name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     *obj = Tcl_NewStringObj(snapshot->proc, -1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     return 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+// }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+// int list_snapshot_ports_to_obj(Tcl_Interp* interp, Tcl_Obj** obj, port** snapshot_ports,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     int snapshot_port_count, reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     int lower_bound = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//     return recast(interp, (cast_function*)snapshot_port_to_obj, &lower_bound, NULL,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+//             (void***)objs, (void**)snapshot_ports, snapshot_port_count, errPtr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+// }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> int file_to_obj(Tcl_Interp* interp, Tcl_Obj** obj, reg_file* file,
         int* lower_bound, reg_error* errPtr) {
     if (file->proc == NULL) {
</pre><pre style='margin:0'>

</pre>