- About
- Data Structures
- Operations
- Directories and Files
- Artifact Types
- Use Cases
- Quick Start
- IDEs
- Project Structure
- Publications
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.
initcommit <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.
.ignorescontains glob file patterns of files that should be ignored by thecommitoperation..adapterscontains 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 theinitoperation.
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.
.configcontains the configuration of the variant contained in the directory. This file is created during thecheckoutoperation. It can also be created manually in which case it is used by thecommitoperation 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..warningscontains a list of feature interaction and uncertain ordering warnings or hints. This file is created by thecheckoutoperation..hashescontains the hashes of files that were created during thecheckoutoperation. They are used by thecommitoperation to identify files that have not been modified.
- Feature Location: Locating the implementation of features (i.e., computing traces) given a set of variants for each of which the configuration (i.e., features it provides) and implementation is known [SPLC'19'].
- Extractive Product Line Engineering: Consolidating a set of individual variants into a common platform representation. In other words, reverse engineering a set of individual variants into a Software Product Line (SPL) [SPLC'13][SoSyM'16].
- Automated Reuse for Clone and Own: Supporting ad hoc development of variants (clone and own) as well as their subsequent maintenance [ICSME'14].
- Reactive/Incremental Product Line Engineering: Supporting the evolution of a set of variants and their individual features [SST'15].
- Distributed Version Control System: Enabling feature-oriented distributed development with features as a core concept [ICSE'16].
Get the code: git clone or download zip file into <working_dir>.
Requires:
- JDK 13
- (optional) Gradle as build system. This is optional as a gradle-wrapper is included.
Run gradle tasks in <working_dir> for a list of supported tasks.
Examples:
gradle buildbuilds the projects.gradle packageLinuxorgradle packageWindowscreates 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.
- Select root directory:
<working_dir> - Search for nested projects.
- Do not copy projects into workspace.
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.
basecontains the core data structures and algorithms.servicecontains the ECCO API and the plugin infrastructure for artifact adapters and storage backends.
clicontains the CLI (Command Line Interface).guicontains the GUI (Graphical User Interface).webcontains the REST API.
adaptercontains artifact adapter projects such asfile(for binary or unknown files),text,image, orjava.storagecontains storage backend projects.
examplescontains various illustrative examples to use as input to ECCO.