From 96114f66fbdb100b1d6f1c03a535c6dedd920f6a Mon Sep 17 00:00:00 2001
From: Stefano Zacchiroli <zack@upsilon.cc>
Date: Fri, 9 Feb 2018 14:32:03 +0100
Subject: [PATCH] docs: add preliminary version of the Merkle DAG diagram

---
 docs/data-model.rst            |   8 ++++++++
 docs/images/.gitignore         |   2 ++
 docs/images/Makefile           |  25 +++++++++++++++++++++++++
 docs/images/swh-merkle-dag.dia | Bin 0 -> 5482 bytes
 4 files changed, 35 insertions(+)
 create mode 100644 docs/images/.gitignore
 create mode 100644 docs/images/Makefile
 create mode 100644 docs/images/swh-merkle-dag.dia

diff --git a/docs/data-model.rst b/docs/data-model.rst
index 1693ae49..8058c214 100644
--- a/docs/data-model.rst
+++ b/docs/data-model.rst
@@ -3,6 +3,14 @@
 Data model
 ==========
 
+.. _swh-merkle-dag:
+.. figure:: images/swh-merkle-dag.svg
+   :width: 1024px
+   :align: center
+
+   Software Heritage archive as a Merkle DAG, augmented with crawling
+   information (click to zoom).
+
 TODO
 
 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
diff --git a/docs/images/.gitignore b/docs/images/.gitignore
new file mode 100644
index 00000000..e9c694ce
--- /dev/null
+++ b/docs/images/.gitignore
@@ -0,0 +1,2 @@
+swh-merkle-dag.pdf
+swh-merkle-dag.svg
diff --git a/docs/images/Makefile b/docs/images/Makefile
new file mode 100644
index 00000000..fc8352ce
--- /dev/null
+++ b/docs/images/Makefile
@@ -0,0 +1,25 @@
+
+MERKLE_DAG = swh-merkle-dag.svg
+
+BUILD_TARGETS =
+BUILD_TARGETS += $(MERKLE_DAG)
+
+all: $(BUILD_TARGETS)
+
+
+# dia exporters
+
+%.eps: %.dia
+	dia -t eps --export $@ $<
+
+%.svg: %.dia
+	dia -t svg --export $@ $<
+
+# generic converters
+
+%.pdf: %.eps
+	epstopdf $<
+
+
+clean:
+	-rm -f $(BUILD_TARGETS)
diff --git a/docs/images/swh-merkle-dag.dia b/docs/images/swh-merkle-dag.dia
new file mode 100644
index 0000000000000000000000000000000000000000..3e4ddc9106078a68c83869a4bf98cbf26a2d90ae
GIT binary patch
literal 5482
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

literal 0
HcmV?d00001

-- 
GitLab