The idea here, and this may exist elsewhere - not sure, is to build out a program that will manage/updating programs built from git hosted source on a system. It requires some manual effort as the install procedures will vary from system to system program to program. But once set it should do pretty well for managing things, only breaking when install procedures or dependencies change (the user will see output to this effect either when running the program or when attempting to install it).
There will be a config with a format in the ballpark of what appears below. It is possible that recutils could be useful for this, but maybe not tie it to that? An ini could also work. When a new program is added to the system the
descriptionthis is pulled from the .git folder of any repo
urlgit repo location (url)
commandinstall command (what you would run to install the program, likely configured manually)
req-sudorequires sudo (boolean for whether sudo is required in order to run the install step)
*currentthe active commit id
*prevprevious commit (the commit that was live on the system before the most recent update, this field is a comma separated slice of previous commits)
* can only be updated by the program and not w/
scbm get _git-url_ [program name]
Action: Will attempt to download the files at the url to the scbm staging folder (location tbd) and add the program url to the database. The name field will default to the repo name, but can be replaced by an optional paramater. Current will be set to the current HEAD commit hash for the repo.
scbm view [-v] _program-name_
Action: Will print a readable table of the current settings for the program in question. If the verbose (
-v) flag is passed the info will be opened up in $READER (or less) and the contents of the readme, if present, will be concatenated to the output.
scbm set _program-name_ _key_ _new-value_
Action: Will set a new value for a given key for a given program. Will request confirmation of value before updating the database.
scbm upgrade _program- name..._
Action: Will pull updates for each program, or optionally just the program passed in, and run the install command for each. Before doing so the current commit hash will be stored in the *prev field for the program.
scbm revert _program-name_
Action: Will move to the commit hash stored in in the *prev field for the given program. Will run the install command for the given program. Will remove the commit hash from the *prev slice and move it to current. If the
-f flag is passed, it will also freeze the program (but not trash it).
Action: Will output a table in the format: "program name\tdescription" for each program currently managed by scbm. The verbose flag will render a full view for all items.
scbm freeze [-trash] _program-name_
Action: Will freeze a program (prevent it from receiving further updates). DOES NOT delete any files or uninstall the programs. If the
-trash flag is passed the repo will be removed from the scbm folder; this is not recommended, as there may be things to refer to in it in order to uninstall the program (but this would be an appropriate flag if the uninstall actions have already been manually undertaken). The
-trash flag is how you would fully remove a program from being managed by scbm.
scbm unfreeze _program-name_
Action: Will reactiveate a frozen program, allowing it to receive updates.
scbm DOES NOT handle dependency management. It is simply a tool for automating updates to compiled programs. Install steps and dependencies still need to be manually handled by the user (in most cases the install steps can be set once and then used for future builds).