Releases: GEOS-ESM/mepo
Allow checkout on all repos
Much like how v1.34.0 allowed fetch
to run on all repos if no components are specified, with this release, mepo checkout
also can now run on all repos if no components are specified.
NOTE: We DO NOT ALLOW mepo checkout -b
to run on all components at once. If you want to make a new branch, we want you to think about it and be specific.
Fix for tags
Clean up and add doc script
This release is mainly a clean up, but it does have a couple substantive changes:
- The
fetch-all
command is removed and "subsumed" into thefetch
command.fetch-all
was written at a time when the developer's Python skills were worse than they presently are. - The
push-all
command was removed. This was always a scary command that mainly existed to push tags on all repos. Once that functionality went tomepo tag push
, this is now cause issues if you pushed when not desired. So, instead, users need to usemepo push
on specific repos.
Beyond this, the main addition is a script that aids in making the Mepo Commands wiki page. For Markdown reasons, some of the Argparse parsers had to be changed to better work with Markdown syntax.
Obey config file for no style
This is a bugfix release. Previously, if no style was passed into mepo, by default it chose prefix. This is fine for GEOSgcm, etc. but broke MAPL which uses naked.
For now, if no style is found passed in on the command line or in .mepoconfig
assume what is in components.yaml
is the correct sytle.
(Updates will be needed to fixtures to support all styles.)
Changes to tag handling
Tags in mepo were always iffy, so this now has better support. With this release these commands:
mepo push --tags
and:
mepo push-all --tags
are now no longer available. To push tags, you now use mepo tag push
:
❯ mepo tag push --help
usage: mepo tag push [-h] [-f] tag-name [comp-name ...]
Push tag <tag-name> in component <comp-name>. If no component is specified, runs over all components
positional arguments:
tag-name
comp-name Component to push tags in
optional arguments:
-h, --help show this help message and exit
-f, --force Force push (be careful!)
Multiple Enhancements and Fixes
This release of mepo
has many enhancements.
Updates
Mepo Styles
With this PR, one can do:
mepo init --style <foo>
or:
mepo clone --style <foo> URL
and the --style <foo>
can be one of naked
, prefix
, and postfix
with the default as prefix
as that is the current dominant style.
These styles are prefix
leads to @subrepo
, postfix
leads to subrepo@
, and naked
leads to subrepo
when mepo
clones the subrepos
Mepo Config
Add support for a ~/.mepoconfig
file and adds a new command:
usage: mepo config [-h] {get,set,delete,print} ...
Runs config commands.
positional arguments:
{get,set,delete,print}
which has four subcommands. I tried to make it like git-config
in many respects, but I'm not that good at Python and Argparse so it's like many other mepo commands with subcommands.
NOTE: This capability is not as powerful as git-config
is. For example, this:
[alias]
ci = commit
is allowed. But this:
[alias]
cm = commit -m
is not. This is a limitation of what I could do in Python and with Argparse. You can make an alias of a command, but not any of the options of commands. And I couldn't figure out how to do aliases with subcommands.
For "style" (see above) the entry would be:
[init]
style = postfix
It's in the [init]
section because technically that is where the command is used. It's just that mepo clone
"piggybacks" on init
so that if you do:
mepo clone --style naked
it's actually doing:
mepo init --style naked
mepo clone
Examples
mepo config print
To print the .mepoconfig
file:
mepo config print
mepo config set
To set a value in the .mepoconfig
file:
mepo set alias.st status
In "gitconfig" style, this is equivalent to adding to the file:
[alias]
st = status
mepo config get
This command gets section.option
:
❯ mepo config get alias.st
[alias]
st = status
mepo config delete
This command deletes the section.option
from the file
Tagging Updates
Allow mepo tag create
and mepo tag delete
to work on all components if none are passed in.
Push-All
Created mepo push-all
to so one can do mepo push-all --tags
to push tags on all repos
ETA: Update to 1.32.0 and use mepo tag push
Fixes
Status and Compare Weirdness
This update uses git rev-list
to try and see if two tags are the same. This can then be used in status
and compare
so that just in case mepo
is seeing different tags, we can check if they point to the same commit. If they do, then we just "re-use" the original tag that mepo clone
used.
Add -q flag
Detect illegal components.yaml
This release adds a check to make sure a component in components.yaml
does not do something like this:
ESMA_cmake:
local: ./ESMA_cmake
remote: ../ESMA_cmake.git
tag: v3.3.6
branch: develop
develop: develop
Now, mepo
will not allow a tag:
and branch:
key in a component.
Also, mepo checkout
and mepo develop
gain useful prints like mepo checkout-if-exists
:
adds some useful prints to mepo checkout
and mepo develop
such that if you do:
❯ mepo checkout v3.1.3 ESMA_env
Checking out v3.1.3 in ESMA_env
❯ mepo checkout -b feature/amazing ESMA_cmake
Creating and checking out branch feature/amazing in ESMA_cmake
❯ mepo develop MAPL
Checking out development branch develop in MAPL
Clean up of mepo save
Fix for cloning
This is a bugfix for mepo. Before, mepo did this when cloning a branch/tag called foo
:
git clone repo.git
git checkout foo
This worked just fine until an update to the MOM6 repo in GEOS. The issue is that in MOM6, the fork was updated and in that update, the submodules underneath changed on the default branch and there were less. So, in doing so, you couldn't get the new submodules. The solution is to do:
git clone -b foo repo.git
This exposed some other issues in status
and compare
which seem to be fixed, but time will tell.