[ANNOUNCE] x-jhbuild 0.4

Dirk Wallenstein halsmit at t-online.de
Mon May 23 03:50:42 PDT 2011


X-JHBuild is a framework for building and working with multiple repositories.
It makes use of JHBuild and is specialized for working with modules that use
Git as SCM.


The New Moduleset Stack:
There can now be multiple modulesets active at the same time.  All modulesets
are cached inside of the repository group.  Modifications to the stack are
staged at first, and then adopted.  Differences as well as conflicts introduced
in the stage can be inspected.

The moduleset stack can persistently describe what repositories are available,
without the need to switch modulesets.

It is possible to write a moduleset that extends another moduleset. This way
developers can publish personal modulesets for their more volatile private
space.  Users can add their own forks or modules through a local moduleset.

Changes to the source/online modulesets won't compromise the stack without
having the ability to spot the problems.  The following problems are
- Multiple Inclusion: When a moduleset with the same name is included multiple
- Name Clashes: Multiple modules have the same name.
- Source Directory Clashes: Multiple modules use the same source directory.
- Missing Main Modules For Forks: If a fork-branch cannot be upgraded to a
  module because the main module is missing.
- Missing Modulesets: A moduleset required by an extension moduleset is not in
  the stack (a hint for missing forks, but might also be required to resolve
- Lost Source directories: When removing a moduleset that describes checked out
Furthermore, invalidating the configuration (moduleset-repo, moduleset-alias)
won't get in the way, unless there is an attempt to update the stack with
online versions of modulesets.

Selecting modulesets located online won't incur a performance penalty, because
all files will be downloaded and stored locally.

Modulesets are identified solely by their base-name without the '.modules'
suffix.  If you save a moduleset locally under a different name, it won't be
recognized as the same.

The new plug-in 'ms-man' can be used to inspect and modify the moduleset stack.
The plug-ins 'diff-ms' and 'checkout' have been adapted to work with the
stack.  They are all documented in their -h/--help output.

When using a repository group without a moduleset stack, it will be initialized
from the moduleset record file.  The old record file will not be deleted, but
it is also not used in the new version.

The configuration option "checkout-moduleset" is now a list and can be used to
provide test cases that include extension modulesets.  For example, if Mr-X has
written a moduleset that extends xorg.modules, the moduleset-repo configuration
could look somewhat like this:

    checkout-moduleset = o:xorg  http://.../mrx.modules
    online-access = http://...

When switching to this configuration, the plug-in 'checkout' will inform about
modulesets that are not already in the stack.  The missing modulesets can be
easily staged by executing:

    xjh ms-man --config-sync

To write a moduleset that extends another moduleset, don't include the required
moduleset, but simply state that relationship with a <required> tag like so:
  <required href="xjh-forks"/>
The only purpose is to provide a hint to the user in case there is an attempt
to remove the required moduleset or to use such a moduleset on its own.  It can
also be a full URL in case that makes sense, but all that is done with it, is
to show it in the conflict output.

There is a documented example moduleset installed to
'~/.x-jhbuild/modulesets/example-extension.modules' that can be used as
a template for own modulesets.

Breaking Stuff:
The moduleset related environment variables have been removed.  There is no
single moduleset selected now and therefore those variables can no longer be
used.  Furthermore, the moduleset won't be displayed in the prompt anymore.

A valid JHBuild Config instance can only be obtained through msstack.  Any
plug-in that imports buildconfig, should be written to only import msstack if

I cannot live with the name of 'checkout' anymore.  That term is much to close
to the name of a command commonly used in diverse VCS for a different task.  I
think 'switch' is a good name for a plug-in that switches between
configurations.  A Sub-command alias can be used to keep the old name.

There is a lot of deprecated configuration in the section buildconfig which
will be removed.  The following sections and options will be removed:
    buildconfig.modules-filter  # now known as modules-pick

msspec and buildconfig will see some simple interface changes.

Smaller Changes:
- config verbosity default changed to only display modified settings.
- diff-ms can display dependency differences and does support forks.
- alias expansion display can be turned off.
- It is possible to use a local mirror for all repositories, which is useful
  when working with multiple repository groups of the same project (see the
  buildconfig.dvcs-mirror-dir configuration option).
- spool can prompt to apply the changes.
- The default build policy is now 'updated-deps'.
- checkout/switch does now accept a config-token as argument, without the '-c'
- It is now possible to select the JHBuild sources that are supposed to be used
  with the environment variable JHBUILD_SOURCE_SELECT="/path/to/jhbuild".
- Several bug fixes.

Dirk Wallenstein (54):
      navi-helper: Fix lookup for alias of an active module
      navi-helper: Use real_name for 'active' lookup
      config: Change verbosity defaults
      show-env: Better *PATH modification examples
      moduletraits: Use unmirrored_module url if available
      diff-ms: Support for forks
      Add modules_pick configuration option
      modaccess: Don't pick modules when sorting
      modinfo/modaccess: Add support for picked modules
      jhbuild_call: Optionally execute with a given configuration
      fork-man: Always use 'updateone' to clone modules
      buildconfig: Hide tags in a HideVersionSelection request
      moduletraits: Make 'url' and 'dir' traits special
      Influence ModuleDiff instantiation with request flags
      Separate traits assembling and merging
      diff-ms/moduletraits: Add support for dependency traits
      jhbuild-update: dvcs-mirror-dir fix
      navi: Case insensitive command line completion
      Optionally suppress alias expansion display
      configsection: Add ConfigSectionValues.__repr__()
      gitaccess: Only check validity of requested references
      modinfo: Accept modules on standard input and as arguments
      jhbuild_call: Don't show traceback for common JHBuild errors
      spool: Prompt the user if changes should be applied
      gitmodules: Use the official git-python repository
      buildconfig: New flags to get a raw moduleset
      diff-ms: compare raw modulesets
      Update main help texts
      utils: add listdir_path()
      utils/moduletraits: Extract get_repogroup_relative_srcdir()
      buildconfig: Change default build-policy to updated-deps
      buildconfig: Interpret all BuildConfigFlags in JHBuild
      moduletraits: Allow to compare the same module instance
      msspec: More meaningful exceptions
      buildconfig: Fix error generation with unknown variable
      msspec: Recognize home-relative path spec as relative
      msspec: Raise a CommonError for an empty/invalid spec
      msspec: Expand alias in get_moduleset_name()
      msspec: add is_existing_url()
      msspec: Add ModulesetSpecDesc class
      Remove moduleset related environment variables
      repogroup: Add moduleset stack location
      spool: documentation update
      Use a moduleset stack
      msstack: Update bash-completion after stage adoption
      Unuse modaccess.get_moduleset()
      Add a documented example extension-moduleset
      checkout: Trigger an error when called without arguments
      checkout: Take a config-token as argument
      init: Don't support nesting repository groups
      buildconfig: Use an empty default value for installprog
      Select JHBuild source to use by environment variable
      example-extension.modules: Fix dependency example


More information about the xorg-devel mailing list