X-JHBuild: A thin JHBuild wrapper with plug-ins.

Dirk Wallenstein halsmit at t-online.de
Thu Jul 15 01:34:27 PDT 2010


This release is mostly about due changes to become future proof. If you
already use X-JHBuild you have to take a few steps to convert your
current installation and repository groups.

- Separate repository, installation and configuration.
- Let the main command be xjh.
- Use a configuration-directory at the repo-group root instead of a
  single configuration file.
- PATH and LD_LIBRARY_CONFIG modifications have to be explicitly
  activated in plug-ins -- just eval another variable.
- Use a new modules file 'xjh.modules' with another directory layout.
- Support multiple repo-group local configurations (but no longer global
- Support repo-group specific hooks.

- Start of an xjhbuild library with, among other things, easy access to
  JHBuild data (install-db, dep-list, etc)
- Tinderwrap can be stopped! And it supports other operations like
  retroactively opening the log.
- The main help dialog gives an overview of all available subcommands.
- All distributed subcommands support the -h/--help switches.
- Facilitate selection of a non-default --libdir

- A new plug-in 'modinfo' to iterate over all or selected modules. The
  modules can be filtered by diverse attributes obtainable from JHBuild,
  like installed, up-to-date, etc. It can display info about each module
  that is easy to parse.

The installation procedure still needs a lot of work, but it uses a
separate location, that can later be moved without impact on the user.
For now almost everything is stuffed into the directory
~/.x-jhbuild/.internal until a decent installation procedure has been
put into place. There are two locations which are of interst to the

Start over:
If you don't mind to install X-JHBuild anew and start with a new
repo-group you would simply have to:
- Remove or rename ~/.x-jhbuild
- Inside the unpacked archive, execute 'make install'
- Make ~/.local/bin/xjh available in you path.
- Start with a new repo-group. (xjh init <path-to-new-repo-group>)

If you want to convert an existing installation/repo-group, the
following steps should accomplish that:
- Rename ~/.x-jhbuild
- Inside the unpacked archive, execute 'make install'
- Move your plug-ins over to the new empty directory
  '~/.x-jhbuild/plugins'. Note that the PATH and LD_LIBRARY_CONF
  modifications are not available by default. As I thought that it would
  mostly be used in shell-scripts, you can simply 'eval
  $XJHBUILD_ENVIRONMENT_SWITCH' to use the new values. See 'xjh
  show-env', the renamed new version of the 'testme' plug-in.
- For each repo-group:
  * Re-init it with 'xjh init' and move the previous
    configuration file to the new one at .xjh/config/default.xjh. You
    might want to merge the files as there are diverse improvements and
    additions in the comments.
  * Copy your hooks to .xjh/hooks
  * Move to the new layout used by xjh.modules (see below). 
- Existing private modulesets might need to be converted to the new
  repo-group layout, too.

Move to a new repo-group directory layout:
There has been the need for a policy concerning the directory layout of
a repo-group and the used module-ids, so that these user visible parts
of a moduleset don't change too often. It is based upon the relatively
stable package name and the fd.o online repository layout.

This is the comment at the top of xjh.modules:
  * The module-id should be equal to the name of the package.
  * The checkoutdir should be equal to the module path with the
    following modifications:
    + The base directory name should be changed to match the module-id,
      if necessary.
    + Repositories in the section "freedesktop.org repositories" should
      get a 'fdo/' prefix.
    + User repositories should get a 'people/' prefix and the tilde
      should be removed.
    + Repositories not hosted on fd.o should get a 'external/' prefix.

To convert from my.modules to xjh.modules, there is the following
plug-in that can be copied to ~/.x-jhbuild/plugins/ and executed:
It will describe what it intends to do and then prompt for confirmation.
There is another plug-in that can help creating such conversion scripts,
but it is currently a bit too rough to install it into the standard
location. Also, I hope that the need for it does not arise to often,
with the moduleset policy in place. It is located here:
Both plug-ins support the -h/--help options.

This new plug-in makes information from JHBuild available more
conveniently. The --help output is very informative. Here just a few
examples what you can do with it:
Display the source directory of every module that is checked out:
  $> xjh modinfo --checked-out --format=dir
After an update, find out which dependencies of the xorg-server are not
up-to-date (where HEAD in not installed, or the tree is dirty):
  $> xjh modinfo --not-up-to-date --deps xorg-server
Using a moduleset snapshot will detach heads. Find all modules with a
detached head and create a special branch at that position. This will
prevent a later update operation from moving away from that position.
  $> xjh modinfo --detached --format=dir | xargs -I XXX sh -c 'cd XXX; pwd; git checkout -b sticky-version'
And much more.

modinfo is the command line interface to the modaccess library module,
which can be used to write specialized plug-ins.

Dirk Wallenstein (71):
      plugins: Improve the coding style of the 'sort-u' plug-in
      plugins: Fix the 'revdep-rebuild' plug-in
      plugins: Remove 'revdep-rebuild'
      plugins: Add operational arguments and help to 'tinderwrap'
      plugins: Support help requests in plug-ins
      plugins: Use a default editor if $EDITOR is unset
      hooks: Minor coding style improvement
      Add short help display for internal commands
      Dispatch plug-ins more reliably
      Pass all subcommands into the restriction enforcer
      Make plug-ins available through the PlugIns class
      Add help for plug-ins
      Facilitate selection of a different libdir
      plugins: Move main log file only if it exists
      plugins: Remove useless output from 'testme'
      plugins: Rename the plug-in 'testme' to 'show-env'
      plugins: Encapsulate tinderbox command check
      plugins: Add a status operation to tinderwrap
      plugins: Handle tinderbox invocation failure in tinderwrap
      Remove old example configurations.
      Use a directory for the configuration of a repo-group
      Make xjh directory path available to plug-ins
      plugins: Use the xjh-dir to record the tinderwrap pid
      Remove the general component access function
      Use a class to make repo-group specific hooks available
      hooks: Rename the example hook to make it inactive
      plugins: Check if the process for the recorded pid is active
      Introduce variables that refer to installation locations
      Search for modulesets in user and distro locations
      Let the official command be 'xjh'
      Introduce a simple Makefile to install X-JHBuild
      Use the new layout from the installation procedure
      Prevent a call to max() with an empty sequence
      config: Add a section to select additional make targets
      plugins: Only open the log if the main log file exists
      Catch subprocess invocation failures
      Implement the subcommand 'script' as a plug-in
      Switch to xjh.modules
      config: Change the example moduleset alias
      Fix selecting a moduleset by path specification
      config: Give an example for the simple branch switch mode
      Allow to switch the runtime environment inside a plug-in
      CPU/OS dependent compilation update
      modules: add bitmap to ext-apps meta-module
      config: Rename xserver to xorg-server in the config template
      Prepare xjhbuild library location
      Move the general helper functions into the utils library
      Complement the copyright note of the main script
      Import one module per line
      JHBuild import preparations
      Move install locations and xjhbuild imports to the top
      Sort in remaining helper functions.
      Move the Flags helper class into the utils library
      utils: Record the entirety of all flags in an attribute
      utils: Check for all whitespace in the corresponding function
      Move cpu/os dependent compilation into depcomp module
      depcomp: Wrap the modules-to-skip calculation into a class
      utils: Add get_envvar_checked
      Move the envvar name variables into the config module
      Rename EnvvarNameModulesetPath to EnvvarNameModulesetURI
      modules: Add a policy comment for 'external' repositories
      lib: Add the module 'modaccess'
      plugins: Add the plug-in 'modinfo'
      Add moduleset transition scripts.
      plugins: Break the plug-in 'sort-u'
      Add a short-help line for the plug-in 'modinfo'
      Add a README file
      Set an envvar for the plugin-data path
      Add copyright notes
      Minor help, documentation and spacing fixes

-------------- next part --------------
A non-text attachment was scrubbed...
Name: x-jhbuild-0.1.5.tar.bz2
Type: application/x-bzip2
Size: 50746 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg-devel/attachments/20100715/be2e8e41/attachment-0002.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: all-new-commit-messages.log.bz2
Type: application/x-bzip2
Size: 6794 bytes
Desc: not available
URL: <http://lists.x.org/archives/xorg-devel/attachments/20100715/be2e8e41/attachment-0003.bin>

More information about the xorg-devel mailing list