This repository has been archived on 2024-02-08. You can view files and clone it, but cannot push or open issues or pull requests.
teamcity-gitea-test-task/README.md

56 lines
2.4 KiB
Markdown
Raw Normal View History

2023-11-30 23:46:20 +00:00
# TeamCity support for Gitea - Test Task
This is a small project to implement a subset of git's functionality in Kotlin and was created using the instructions
below as part of my application to the JetBrains internship project "TeamCity support for Gitea".
The package is named `tinyvm` for 'tiny version manager'.
2023-11-30 23:46:20 +00:00
## Assumptions
Since this is an internship application project, I have assumed that a minimal usage of external libraries is preferred,
so that a greater technical understanding can be demonstrated.
2023-12-02 02:47:15 +00:00
## Usage
### Gradle
```kotlin
repositories {
// other repositories
maven { url "https://git.koval.net/api/packages/cyclane/maven" }
}
dependencies {
implementation("net.koval.teamcity-gitea-test-task:tinyvm:0.1.0")
}
```
2023-12-02 03:38:41 +00:00
### Documentation
Use autocompletion and hover menus in your IDE, or download the
[generated HTML documentation](https://git.koval.net/cyclane/teamcity-gitea-test-task/releases/download/v0.1.0/tinyvm-0.1.0-javadoc.zip)
from the [latest release](https://git.koval.net/cyclane/teamcity-gitea-test-task/releases).
2023-11-30 23:46:20 +00:00
## Instructions
Create a library that implements simple Git functionality. You need to implement at least three entities:
- `Blob` will contain some data, which for the sake of simplicity, will be represented as a string. Additionally, it
will store a SHA-1 hash* that uniquely identifies the blob;
- `Tree` will function as a container for a collection of named blobs or other trees. It will also have a SHA-1 hash
that uniquely identifies the tree;
- `Commit` will serve as a pointer to the main `Tree` object and store metadata related to the commit. This metadata
will include the author of the commit, the commit message, the commit time, and the SHA-1 hash of the commit itself.
Commits should be stored chronologically so that their relationship can be tracked.
Your implementation should avoid stored data redundancy like real Git does.
The implementation does **not** need to include persistence functionality, which refers to the ability to store data
using the library in previous runs.
The library you implement should be able to:
- Create new commits;
- List commits;
- Search for specific commit by hash or metadata and print its content.
You should use Java or Kotlin for your implementation.
It would be highly beneficial to implement tests for basic usage scenarios and corner cases.
**SHA-1 hash is a cryptographic hash function that calculates a unique fixed-size output based on the input data*