GSoC 2014 - Interactive Port Command and
Marcus Santos
mvcs at me.com
Wed Mar 19 18:29:16 PDT 2014
Hi Clemens,
Can you help me with some questions I have about base/src/port/port.tcl and base/src/macports1.0.tcl?
First of all I need to understand how they work together and what is the role of each one. I have been around the code of the progress bar to understand how it works and trying to realize how can I do the interaction between the user and macports, and where to assess the input from the user. Second, how can I use the interface of macports1.0 to allow asking user questions?
Thanks in advance,
Marcus Santos.
No dia 28/02/2014, às 10:12, Clemens Lang <cal at macports.org> escreveu:
> Hi Marcus,
>
> On Tue, Feb 25, 2014 at 11:18:27PM +0000, Marcus Santos wrote:
>> I already started to read the Tcl tutorial on GSoC’s page and I would
>> be grateful if you can help me to learn more about the project.
>
> The Tcl tutorial is certainly a good start, as is learning a little
> about Portfiles and how they work from https://guide.macports.org.
>
> Regarding the interactive port command proposal:
> There currently are some places in MacPorts where a user action is
> aborted because of a conflict that needs to be resolved manually. Since
> there is no API to communicate with a user (and ask for decisions or
> approval), MacPorts usually just errors out in these cases, printing
> some instructions on what to do next.
>
> To understand why this is a problem (and the code that does that can't
> just print a message and wait for user input directly) you need to be
> aware of some of MacPorts' architectural principles: The port(1) command
> you actually use when giving MacPorts commands is just a frontend for
> the macports1.0 package, which really is the core of MacPorts. This
> package knows about Portfile, where they are and how they need to be
> run; it creates Tcl slave interpreters, resolves dependencies, runs
> Portfiles, etc. Another vital part is the API offered to Portfiles (i.e.
> all the commands that can be used from a Portfile), which is contained
> in the port1.0 package. In theory (that hasn't happened so far), port(1)
> is only *one* possible client for MacPorts. All interaction between
> port(1) and macports1.0 should also be possible from a MacPorts GUI for
> example (note that there are some GUIs available, but to my knowledge
> none of them works using that principle).
>
> Your job would thus be to draft and implement an API extension for the
> interface offered by the macports1.0 package to allow asking the user
> questions and waiting for user feedback, possibly using a series of
> callback functions. The recently added progress bars [1] might give you
> an impression how that can be done.
>
> Your job would also be to identify places where interactivity would make
> sense and implement it there. Three examples come to mind immediately:
> - When trying to install a port that conflicts with a port you already
> have installed, ask the user whether the conflicting port should be
> disabled.
> - When trying to install a port but one of the files installed by this
> port is already present, ask the user whether the file should be
> overwritten.
> - When a user tries to install a port, display a list of ports that
> will be installed as dependencies and ask for confirmation (unless
> there aren't any dependencies to be installed), like apt-get does.
> Keep in mind that for non-interactive invocations (i.e. port(1) running
> without being connected to a TTY) should still work just like before.
>
> If you have any further questions, feel free to ask right away -- after
> all communication is pretty much half of what GSoC is about :)
>
> [1] http://trac.macports.org/changeset/117044
> http://trac.macports.org/changeset/117045
> http://trac.macports.org/changeset/117046
> http://trac.macports.org/changeset/117186
> http://trac.macports.org/changeset/117219
> http://trac.macports.org/changeset/117231
>
> --
> Clemens Lang
>
More information about the macports-dev
mailing list