<div dir="ltr">Hi Josh,<div><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Taking a step back for a moment, why is an SQL database the best way to store this data? What sorts of queries are you going to want to run on it? Would a text (Tcl array) representation similar to the PortIndex be a better fit?<br></blockquote><div><br></div><div><br></div><div>We need to store all the information about the existing state of the ports first, then uninstall all the ports and re-install on the updated OS after self-updating using the info we have in the database. So, we can't have a temporary kind of Tcl array representation.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I can get this info from `port -v installed` and `port -v installed requested` command, that is, calling /action_installed/ [1] which in turn, calls /registry::installed/ [2] for each port from /snapshot_main/. Is this best way to go?<br>
</blockquote>
<br>
Using registry::installed will work, but it's not the most efficient since it provides the same interface as the old flat-file registry (See below).<br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Further, can you point me to some port action where it deals with retrieving and populating tables as a hint? The /action_target/ used for most of the port commands like /install/, /clean/, /fetch/ doesn't really hint on how to deal with it.<br>
</blockquote>
<br>
These don't deal with SQL directly, they use the registry API.<br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I hunted down till I reached /macports::registry.format/  --> /receipt_{flat/sqlite}.tcl /files//which have a bunch of functions using /registry::entry/ which I think is the most "basic" operation and then, also /receipt_sqlite:://create_entr<wbr>y_l/function.<br>
</blockquote>
<br>
The way to get the list of installed ports is with 'registry::entry imaged'. Have a look at how reclaim.tcl does it for example.<br></blockquote><div><br></div><div><br></div><div>Yes, thanks for this. @Brad, 'registry::entry imaged' or 'registry::entry installed', may be? </div><div><br></div><div>I found 2 functions reg_entry_imaged() and reg_entry_installed() in registry, which look almost similar implementation wise. Can you tell me what is an imaged port? I mean, how will the two results be different?</div><div> </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
The create_entry_l procedure is there to help in converting the old flat-file format to sqlite. It's probably not very relevant for you.<br></blockquote><div> </div><div>Yeah, ignoring this.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
If you do end up adding new tables to the db, you will need to add support for them to the entire stack from cregistry up.<br></blockquote><div><br></div><div><br></div><div>I think you're referring to the work in last two commits <a href="https://github.com/macports/macports-base/commits/gsoc17-migrate?author=umeshksingla" target="_blank">here</a>. </div><div><br></div></div><br><div>Thank you for the help,</div><div class="gmail-m_6260666060105455160gmail_signature"><div dir="ltr">Umesh</div><div dir="ltr"><br></div></div>
</div></div></div>