Unlike the previous one, this was a more productive period. There were some important discoveries I made about how the port command works and how the macports-base is written to serve the Tcl and registry APIs for non-core modules.
I'll finally update you on the three phases of my project in a more formal way.
- A snapshot is a list of all commands that created the current installed state.
- Restoring a snapshot deactivates the active ports and reproduce the install commands for the selected snapshot.
- Migrate creates a new snapshot, uninstalls installed ports and reproduces the install commands for the last snapshot.
Second Phase: In all, the action `migrate` aims to create a new snapshot, uninstalls all ports, upgrades the port command for the new architecture and finally restores the last snapshot which involves installing all ports from the snapshot we created before uninstalling. Till now, I have finished the following procedures.
- uninstall_installed to uninstall all the currently installed ports.
- recover_ports_state to install and activate (according to the snapshot) the ports to bring out the state as close to before migrating.
- sort_portlist_by_dependents and port_dependencies to get the dependents and dependencies in the topologically sorted order in order to avoid installation of broken ports.
There is a great deal of project left for the next phase. At a higher level, I still haven't written for fetching the snapshot from the database, needs rigorous testing and error handling. From the previous phase, the above-proposed changes are still left.
The next phase will include finishing the migrate action, connecting it to the snapshot action but majorly, the implementation of restore action. I'll very likely need to take the help of my mentor in the coming phase.
The next phase will include finishing the migrate action, connecting it to the snapshot action but majorly, the implementation of restore action. I'll very likely need to take the help of my mentor in the coming phase.
In this period, I have also tried to improve on updates for the community with all the issues, leftovers and other points separately laid out. This helped to bring out the best in the discussion.
Find the work log here.
Find the work log here.