ECCO is a feature-oriented and distributed configuration management and version control system.
It supports variability in (i.e., the configuration of) any type of artifact (e.g., text, images, code) for which an adapter is available.
Originally, the name ECCO was an acronym for Extraction and Composition for Clone-and-Own.
A repository contains features, revisions, artifacts, and traces (i.e., mappings between features, revisions, and artifacts).
ECCO supports local operations as well as distributed operations.
init
commit <full configuration>
checkout <full configuration>
clone <partial configuration>
push <partial configuration>
pull <partial configuration>
The directory in which the repository contents are stored. By default named .ecco
.
It contains files used by the storage backend to persist the repository contents.
Its contents depend on the used storage backend and should not be modified manually, except the following two files which are not specific to the used storage backend, are created by the init
operation and can be modified manually.
.ignores
contains glob file patterns of files that should be ignored by the commit
operation..adapters
contains pairs of glob file patterns and identifiers of artifact adapter that should be used for the matched files. The initial contents of the file are created based on the default patterns of each installed artifact adapter during the init
operation.The directory in which the raw implementation artifacts (files) of a variant reside. Also sometimes called working directory.
The contents of this directory are processed by the readers of the respective artifact adapters during a commit
and created by the writers of the respective artifact adapters during a checkout
.
The contents in this directory are created by the user and can be arbitrarily modified during development, except the following three files which are created by the checkout
and commit
operations.
.config
contains the configuration of the variant contained in the directory. This file is created during the checkout
operation. It can also be created manually in which case it is used by the commit
operation instead of having to pass the configuration as a parameter. If it exists its contents should always be updated to reflect the performed changes, specifically, the modified features should be marked as such..warnings
contains a list of feature interaction and uncertain ordering warnings or hints. This file is created by the checkout
operation..hashes
contains the hashes of files that were created during the checkout
operation. They are used by the commit
operation to identify files that have not been modified.Get the code: git clone
or download zip file into <working_dir>
.
Requires:
Run gradle tasks
in <working_dir>
for a list of supported tasks.
Examples:
gradle build
builds the projects.gradle packageLinux
or gradle packageWindows
creates binary distributions as zip file packages for every project. In case of projects that can be run (like CLI or GUI) the contents can be extracted and run.IntelliJ supports Gradle out of the box. Just open the project using File > Open
.
This information might be outdated!
Eclipse does not support Gradle by default. There is a Gradle plugin for Eclipse, but I do not recommend it! Instead, follow these steps:
Create Eclipse projects from Gradle projects: gradle eclipse
. This creates the .project
and .classpath
files Eclipse needs for every project.
Import the created Eclipse projects into your Eclipse workspace: File > Import > General > Existing Projects Into Workspace
.
<working_dir>
Select all shown projects and import them.
Disable errors for cyclic dependencies in Eclipse: Window > Preferences > Java > Compiler > Building > Build path problems > Circular dependencies > Warning
.
The root-project ecco
consists of a number of sub-projects.
base
contains the core data structures and algorithms.service
contains the ECCO API and the plugin infrastructure for artifact adapters and storage backends.cli
contains the CLI (Command Line Interface).gui
contains the GUI (Graphical User Interface).web
contains the REST API.adapter
contains artifact adapter projects such as file
(for binary or unknown files), text
, image
, or java
.storage
contains storage backend projects.examples
contains various illustrative examples to use as input to ECCO.