= rdiff-backup: {page-name}
:page-name: Architecture
:sectnums:
:toc: macro

link:..[Home,role="button round"] // *{page-name}*

'''''

this directories contains higher-level documentation about the rdiff-backup architecture.

NOTE: it is much work in progress as of now, and reverse engineering from code.

toc::[]

== Diagrams

* The script link:rdiff_backup_classes.sh[rdiff_backup_classes.sh] generates a link:rdiff_backup_classes.puml[simple class diagram] in https://plantuml.com/class-diagram[PlantUML format], which is itself rendered into an link:rdiff_backup_classes.svg[SVG class diagram], which most browsers should be able to render properly.
This diagram shows only class inheritance but is properly sorted into rdiff-backup's modules.
* Generated with `pyreverse-3 -k -m y -o svg rdiff_backup` (from the `pylint` package), the link:classes.svg[pyreverse class diagram] looks less readable to me but it shows also composition/aggregation of classes.
The link:packages.svg[packages diagram] generated by the same command is itself utterly useless.

== Plug-in architecture

Even if it might not make sense to write plug-ins for rdiff-backup, in the sense of "dropdown" external plug-ins, it definitely makes sense to define plug-in interfaces which makes it easier to disentangle the code, and extend it without inadvertently breaking other aspects.

The link:plugins[plug-ins interface] is defined in a separate document.

== Locations

How xref:locations.adoc[locations objects], i.e. directories and repositories, are handled is described.
There is for now a rather outdated xref:repository_format.adoc[format document].

== Other topics

* xref:completion.adoc[shell completion scripting] - if you want to add your ownshell completion script
* xref:error_policy.adoc[error policy] - quite old
