...
 
Commits (2)
---
title: "tale"
subtitle: "a BTI7301 project"
subtitle: "an experimental Version Control System"
author:
- Marius Schär
- Severin Kaderli
......@@ -19,8 +19,34 @@ links-as-notes: true
# Introduction
## Version Control Systems
\colsbegin
\col{50}
- Git
- Mercurial
- Subversion
- BitKeeper
- ClearCase
- $\hdots$
\col{50}
. . .
- [Many different approaches](https://en.wikipedia.org/wiki/Comparison_of_version-control_software)
* Centralized vs. Decentralized
* Snapshot vs. Changeset
* Hashes vs. Numbers
* Files vs. Trees
* Lock vs. Merge
## Definitions
\colsend
## Goal
- Self Hosting ^[Version the code to tale with tale]
- Further our understanding of VCS
# Scope
......@@ -38,6 +64,31 @@ links-as-notes: true
# Requirements
## Requirements
- shown in the demo
- we did not implemented branching and merging
## Requirements
#### show differences
- `tale diff`
- `tale diff --no-index <file> <file>`
. . .
#### record history
- `tale add <files>`
- `tale commit -m "<message>"`
## Requirements
#### show history
- `tale show <commitID>`
- `tale log`
. . .
#### undo history
- `tale revert <commitID>`
# Technical Details
## Runtime
......@@ -234,9 +285,68 @@ EditScript:
\colsend
## History
## Persistence
\colsbegin
\col{60}
![](assets/model_1.png)
\col{40}
```{.diff}
@@ -1,5 +1,6 @@
# tale
-The VCS of the future
+An experimental VCS
+(not for production use)
## How to build
`mvn clean install`
```
\colsend
## Persistence
\colsbegin
\col{60}
![](assets/model_2.png)
\col{40}
- loaded from disk as an array of lines (`blob`)
- lazily decoded
- often the patches aren't needed
\colsend
## Persistence
\colsbegin
\col{60}
![](assets/model_full.png)
\col{40}
- `parentID` points back to the parent commit
- on diks as base64 encoded JSON
- `content` encoded seperately
\colsend
## Persistence
- Very different from the git model
* snapshot at every commit (git)
* vs. just difference (tale)
- leads to some problems
## History
- every `TaleObject` has an ID
* ID is a SHA-256 digest
of the object content on disk
- graph where each commit points to parent
- model is set up for merging (`parent2ID`)
# Technical Problems
## Reflection
......