bet we will fix some bugs and make a world even a better place.
Major refactoring and deprecations
- DataLad no longer supports Python 2. The minimum supported version
of Python is now 3.5. ([3629][])
- Much of the user-focused content at http://docs.datalad.org has been
removed in favor of more up to date and complete material available
in the [DataLad Handbook][handbook]. Going forward, the plan is to
restrict http://docs.datalad.org to technical documentation geared
at developers. ([3678][])
- [update][] used to allow the caller to specify which dataset(s) to
update as a `PATH` argument or via the the `--dataset` option; now
only the latter is supported. Path arguments only serve to restrict
which subdataset are updated when operating recursively.
([3700][])
- Result records from a [get][] call no longer have a "state" key.
([3746][])
- [update][] and [get][] no longer support operating on independent
hierarchies of datasets. ([3700][]) ([3746][])
- The [run][] update in 0.12.0rc4 for the new path resolution logic
broke the handling of inputs and outputs for calls from a
subdirectory. ([3747][])
- The `is_submodule_modified` method of `GitRepo` as well as two
helper functions in gitrepo.py, `kwargs_to_options` and
`split_remote_branch`, were no longer used internally or in any
known DataLad extensions and have been removed. ([3702][])
([3704][])
- The `only_remote` option of `GitRepo.is_with_annex` was not used
internally or in any known extensions and has been dropped.
([3768][])
- The `get_tags` method of `GitRepo` used to sort tags by committer
date. It now sorts them by the tagger date for annotated tags and
the committer date for lightweight tags. ([3715][])
- The `rev_resolve_path` substituted `resolve_path` helper. ([3797][])
Fixes
- Correctly handle relative paths in [publish][]. ([3799][]) ([3102][])
- Do not erroneously discover directory as a procedure. ([3793][])
- Correctly extract version from manpage to trigger use of manpages for
`--help`. ([3798][])
- The `cfg_yoda` procedure saved all modifications in the repository
rather than saving only the files it modified. ([3680][])
- Some spots in the documentation that were supposed appear as two
hyphens were incorrectly rendered in the HTML output en-dashs.
([3692][])
- [create][], [install][], and [clone][] treated paths as relative to
the dataset even when the string form was given, violating the new
path handling rules. ([3749][]) ([3777][]) ([3780][])
- Providing the "^" shortcut to `--dataset` didn't work properly when
called from a subdirectory of a subdataset. ([3772][])
- We failed to propagate some errors from git-annex when working with
its JSON output. ([3751][])
- With the Python API, callers are allowed to pass a string or list of
strings as the `cfg_proc` argument to [create][], but the string
form was mishandled. ([3761][])
- Incorrect command quoting for SSH calls on Windows that rendered
basic SSH-related functionality (e.g., [sshrun][]) on Windows
unusable. ([3688][])
- Annex JSON result handling assumed platform-specific paths on Windows
instead of the POSIX-style that is happening across all platforms.
([3719][])
- `path_is_under()` was incapable of comparing Windows paths with different
drive letters. ([3728][])
Enhancements and new features
- Provide a collection of "public" `call_git*` helpers within GitRepo
and replace use of "private" and less specific `_git_custom_command`
calls. ([3791][])
- [status][] gained a `--report-filetype`. Setting it to "raw" can
give a performance boost for the price of no longer distinguishing
symlinks that point to annexed content from other symlinks.
([3701][])
- [save][] disables file type reporting by [status][] to improve
performance. ([3712][])
- [subdatasets][] ([3743][])
- now extends its result records with a `contains` field that lists
which `contains` arguments matched a given subdataset.
- yields an 'impossible' result record when a `contains` argument
wasn't matched to any of the reported subdatasets.
- [install][] now shows more readable output when cloning fails.
([3775][])
- `SSHConnection` now displays a more informative error message when
it cannot start the `ControlMaster` process. ([3776][])
- If the new configuration option `datalad.log.result-level` is set to
a single level, all result records will be logged at that level. If
you've been bothered by DataLad's double reporting of failures,
consider setting this to "debug". ([3754][])
- Configuration values from `datalad -c OPTION=VALUE ...` are now
validated to provide better errors. ([3695][])
- [rerun][] learned how to handle history with merges. As was already
the case when cherry picking non-run commits, re-creating merges may
results in conflicts, and `rerun` does not yet provide an interface
to let the user handle these. ([2754][])
- The `fsck` method of `AnnexRepo` has been enhanced to expose more
features of the underlying `git fsck` command. ([3693][])
- `GitRepo` now has a `for_each_ref_` method that wraps `git
for-each-ref`, which is used in various spots that used to rely on
GitPython functionality. ([3705][])
- Do not pretend to be able to work in optimized (`python -O`) mode,
crash early with an informative message. ([3803][])
0.12.0rc5 (September 04, 2019) -- .
Various fixes and enhancements that bring the 0.12.0 release closer.
Major refactoring and deprecations
- The two modules below have a new home. The old locations still
exist as compatibility shims and will be removed in a future
release.
- `datalad.distribution.subdatasets` has been moved to
`datalad.local.subdatasets` ([3429][])
- `datalad.interface.run` has been moved to `datalad.core.local.run`
([3444][])
- The `lock` method of `AnnexRepo` and the `options` parameter of
`AnnexRepo.unlock` were unused internally and have been removed.
([3459][])
- The `get_submodules` method of `GitRepo` has been rewritten without
GitPython. When the new `compat` flag is true (the current
default), the method returns a value that is compatible with the old
return value. This backwards-compatible return value and the
`compat` flag will be removed in a future release. ([3508][])
- The logic for resolving relative paths given to a command has
changed ([3435][]). The new rule is that relative paths are taken
as relative to the dataset only if a dataset _instance_ is passed by
the caller. In all other scenarios they're considered relative to
the current directory.
The main user-visible difference from the command line is that using
the `--dataset` argument does _not_ result in relative paths being
taken as relative to the specified dataset. (The undocumented
distinction between "rel/path" and "./rel/path" no longer exists.)
All commands under `datalad.core` and `datalad.local`, as well as
`unlock` and `addurls`, follow the new logic. The goal is for all
commands to eventually do so.
Fixes
- The function for loading JSON streams wasn't clever enough to handle
content that included a Unicode line separator like
U2028. ([3524][])
- When [unlock][] was called without an explicit target (i.e., a
directory or no paths at all), the call failed if any of the files
did not have content present. ([3459][])
- `AnnexRepo.get_content_info` failed in the rare case of a key
without size information. ([3534][])
- [save][] ignored `--on-failure` in its underlying call to
[status][]. ([3470][])
- Calling [remove][] with a subdirectory displayed spurious warnings
about the subdirectory files not existing. ([3586][])
- Our processing of `git-annex --json` output mishandled info messages
from special remotes. ([3546][])
- [create][]
- didn't bypass the "existing subdataset" check when called with
`--force` as of 0.12.0rc3 ([3552][])
- failed to register the up-to-date revision of a subdataset when
`--cfg-proc` was used with `--dataset` ([3591][])
- The base downloader had some error handling that wasn't compatible
with Python 3. ([3622][])
- Fixed a number of Unicode py2-compatibility issues. ([3602][])
- `AnnexRepo.get_content_annexinfo` did not properly chunk file
arguments to avoid exceeding the command-line character limit.
([3587][])
Enhancements and new features
- New command `create-sibling-gitlab` provides an interface for
creating a publication target on a GitLab instance. ([3447][])
- [subdatasets][] ([3429][])
- now supports path-constrained queries in the same manner as
commands like `save` and `status`
- gained a `--contains=PATH` option that can be used to restrict the
output to datasets that include a specific path.
- now narrows the listed subdatasets to those underneath the current
directory when called with no arguments
- [status][] learned to accept a plain `--annex` (no value) as
shorthand for `--annex basic`. ([3534][])
- The `.dirty` property of `GitRepo` and `AnnexRepo` has been sped up.
([3460][])
- The `get_content_info` method of `GitRepo`, used by `status` and
commands that depend on `status`, now restricts its git calls to a
subset of files, if possible, for a performance gain in repositories
with many files. ([3508][])
- Extensions that do not provide a command, such as those that provide
only metadata extractors, are now supported. ([3531][])
- When calling git-annex with `--json`, we log standard error at the
debug level rather than the warning level if a non-zero exit is
expected behavior. ([3518][])
- [create][] no longer refuses to create a new dataset in the odd
scenario of an empty .git/ directory upstairs. ([3475][])
- As of v2.22.0 Git treats a sub-repository on an unborn branch as a
repository rather than as a directory. Our documentation and tests
have been updated appropriately. ([3476][])
- [addurls][] learned to accept a `--cfg-proc` value and pass it to
its `create` calls. ([3562][])