= Summer of Code 2014 = This page is dedicated to the projects accepted into Google SoC 2014, here's a list of accepted projects: || '''Project''' || '''Student''' || '''Mentor''' || || [wiki:SummerOfCode2014#pip2port Read packages from pip] || [wiki:gaurav Gaurav Bansal] || [wiki:pixilla Bradley Giesbrecht] || || [wiki:SummerOfCode2014#cleanup Project Clean-up Stuff] || [wiki:ksammons Kyle Sammons] || [wiki:michaelld Michael Dickens] || || [wiki:SummerOfCode2014#interactive Interactive Port Command] || [wiki:shasha Shashwat Pandey] || [wiki:raimue Rainer Mueller] || ==== Read packages from Python's PIP (pip2port) ==== #pip2port MacPorts should be able to more readily install python packages from pip. We don't want to integrate the build/installation process of PIP, simply parse information or eggs it provides for various packages. This information will then be used to generate a Portfile, akin to [[browser:contrib/cpan2port/cpan2port|cpan2port]]. There may be instances where MacPorts package names don't match up with pip’s. In this case, pip should be the authority and all improperly named MacPorts packages should be replaced by a renamed copy. Verbose automation of this step, akin to the portcheckup script, is ideal. The [[browser:contrib/portfile-gen/portfile-gen|portfile generator]] might be helpful. * Difficulty: Medium * Languages: Tcl, Python, C * Potential mentors: snc ToDo 1. Pull data from [https://github.com/edumbill/doap/wiki DOAP] for building base Portfile. * name * version * master_site * shortdescription * description * license * disfiles * depends_lib ==== Interactive port command ==== #interactive Write an interactive command-line tool that can be used instead of the non-interactive port(1). (The existing "interactive mode" of port(1) is actually just batch mode reading from stdin, and is not really interactive.) Factor out code used by both tools into a shared module. An interactive tool would ask for user input to resolve many situations that cause port(1) to simply error out. All the suggested interactivity use cases are listed below- 1. If you try to install a port and one of its dependencies conflict with something already installed, it could ask if you want to deactivate the installed one and its dependents and reactivate them after the build. 2. 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. 3. 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. 4. Asking for permission in a situation where uninstalling a package will break another package that's still installed and depends on the to-be-uninstalled package. 5. When installing a port that requires a dependency to have a certain variant, but this variant is not set. Ask the user if it should reinstall the dependency with that variant. 6. When activate is ambiguous, present a list of installed ports for the user to choose from. 7. Ask user before rebuilding in rev-upgrade. 8. When a user uninstalls a port using --follow-dependencies, the list of dependencies will be displayed and the user will be asked for confirmation. * Difficulty: Medium * Languages: Tcl, C * Potential mentors: TBD ==== Project Clean-up Stuff ==== #cleanup The plans for this project are to combine the ideas of "Reclaim Disk Space" and "Configuration and Environment Selftest". This involves adding a "brew doctor"-esque command which will look for common issues such as a port that is known to cause issues, multiple versions of the same library, not having the correct dependency installed, or any other common issue and then report all found to the user. It also involves improving the already implemented "port clean" command to be able to delete and clear out more disk space than it currently is able to by deleting distribution files from a certain version of an application, removing distribution files currently not needed/in use, deleting/uninstalling ports that are no longer in use, or any other way possible.