# xebialabs-community/xl-repository-tools architecture

> Architecture diagram of the GitHub repository xebialabs-community/xl-repository-tools, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/xebialabs-community/xl-repository-tools
- Repository: https://github.com/xebialabs-community/xl-repository-tools

## Overview

This is a Java command-line toolkit for XL Deploy repository maintenance. Its principal workflow opens source and fresh destination installations, recreates the source node tree in the destination, then copies properties while translating references; it intentionally skips the version database. The tree traversal periodically saves destination sessions and reports failed properties. A separate VersionHistoryFixer repairs inconsistent version histories. Source excerpts support these relationships, but do not show repository internals beyond the Jackrabbit APIs used.

Main entry points: [`src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java`](https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java) (Repository copier), [`src/main/java/com/xebialabs/repository/tools/VersionHistoryFixer.java`](https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/VersionHistoryFixer.java) (History fixer), [`src/main/java/com/xebialabs/repository/tools/Stats.java`](https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/Stats.java) (Copy statistics)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_migration["Repository migration"]
  node_copier["Repository copier"]
  node_tree["Tree traversal"]
  node_nodes["Node creation"]
  node_properties["Property copying"]
  node_references["Reference conversion"]
  node_stats["Copy statistics<br/>[Stats.java]"]
end

subgraph group_access["Repository access"]
  node_config["Repository configuration"]
  node_source[("Source repository")]
  node_destination[("Destination repository")]
end

subgraph group_maintenance["Version maintenance"]
  node_fixer["History fixer"]
  node_history[("Version history")]
end

node_operator(("Operator"))

node_operator -->|"runs"| node_copier
node_copier -->|"loads configuration"| node_config
node_copier -->|"opens source"| node_source
node_copier -->|"opens destination"| node_destination
node_copier -->|"starts traversal"| node_tree
node_tree -->|"reads nodes"| node_source
node_tree -->|"creates nodes"| node_nodes
node_nodes -->|"writes nodes"| node_destination
node_copier -->|"starts property copy"| node_properties
node_properties -->|"reads properties"| node_source
node_properties -->|"writes properties"| node_destination
node_properties -->|"converts references"| node_references
node_references -->|"resolves identifiers"| node_source
node_references -->|"sets references"| node_destination
node_tree -->|"counts nodes"| node_stats
node_properties -->|"counts failures"| node_stats
node_operator -->|"runs separately"| node_fixer
node_fixer -->|"checks and repairs"| node_history

click node_copier "https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java"
click node_config "https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java"
click node_tree "https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java"
click node_nodes "https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java"
click node_properties "https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java"
click node_references "https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java"
click node_stats "https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/Stats.java"
click node_fixer "https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/VersionHistoryFixer.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_copier,node_tree,node_nodes,node_properties,node_references,node_stats toneBlue
class node_config,node_source,node_destination toneAmber
class node_fixer,node_history toneMint
class node_operator toneIndigo
```

## Components

### Repository migration

- [Repository copier](https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java): `src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java`
- [Tree traversal](https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java): `src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java`
- [Node creation](https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java): `src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java`
- [Property copying](https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java): `src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java`
- [Reference conversion](https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java): `src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java`
- [Copy statistics](https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/Stats.java): `src/main/java/com/xebialabs/repository/tools/Stats.java`

### Repository access

- [Repository configuration](https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java): `src/main/java/com/xebialabs/repository/tools/NodeForNodeRepositoryCopier.java`
- **Source repository**
- **Destination repository**

### Version maintenance

- [History fixer](https://github.com/xebialabs-community/xl-repository-tools/blob/master/src/main/java/com/xebialabs/repository/tools/VersionHistoryFixer.java): `src/main/java/com/xebialabs/repository/tools/VersionHistoryFixer.java`
- **Version history**

### Other components

- **Operator**

## Connections

- Operator → Repository copier: runs
- Repository copier → Repository configuration: loads configuration
- Repository copier → Source repository: opens source
- Repository copier → Destination repository: opens destination
- Repository copier → Tree traversal: starts traversal
- Tree traversal → Source repository: reads nodes
- Tree traversal → Node creation: creates nodes
- Node creation → Destination repository: writes nodes
- Repository copier → Property copying: starts property copy
- Property copying → Source repository: reads properties
- Property copying → Destination repository: writes properties
- Property copying → Reference conversion: converts references
- Reference conversion → Source repository: resolves identifiers
- Reference conversion → Destination repository: sets references
- Tree traversal → Copy statistics: counts nodes
- Property copying → Copy statistics: counts failures
- Operator → History fixer: runs separately
- History fixer → Version history: checks and repairs
