[[!template id=project title="Version control config files" contact=""" [tech-pkg](mailto:tech-pkg@NetBSD.org) """ mentors=""" [Thomas Klausner](mailto:wiz@NetBSD.org) """ category="pkgsrc" difficulty="easy" duration="3 months" description=""" Put config files (etc/) installed by pkgsrc into some version control system to help keeping track of changes and updating them. The basic setup might look like this: * There is a repository containing the config files installed by pkgsrc, starting out empty. * During package installation, pkgsrc imports the package's config files into the repository onto a branch tagged with the name and version of the package (if available, on a vendor branch). (e.g.: digest-20080510) * After installation, there are two cases: 1. the package was not installed before: the package's config files get installed into the live configuration directory and committed to the head of the config repository 2. the package was installed before: a configuration update tool should display changes between the new and the previous original version as well as changes between the previous original and installed config file, for each config file the package uses, and support merging the changes made necessary by the package update into the installed config file. Commit the changes to head when the merge is done. * Regular automated check-ins of the entire live pkgsrc configuration should be easy to set up, but also manual check-ins of singular files so the local admin can use meaningful commit messages when they change their config, even if they are not experienced users of version control systems The actual commands to the version control system should be hidden behind an abstraction layer, and the vcs operations should be kept simple, so that other compatibility layers can be written, and eventually the user can pick their vcs of choice (and also a vcs location of choice, in case e.g. the enterprise configuration repository is on a central subversion server). milestones/goals: * choose a VCS system (BSD licensed is a nice-to-have) * write wrappers around it, or embed its functionality * demonstrate usage in upgrades bonus: * extend functionality into additional VCS systems This project was done during Google Summer of Code 2018 by Keivan Motavalli [Configuration files versioning in pkgsrc](https://summerofcode.withgoogle.com/archive/2018/projects/4858976697057280/) project. At the moment the code need to be reviewed and imported in pkgsrc. """ ]]