Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
a6c6f55
drop
gennady-lebedev Feb 23, 2023
7ca0016
upgrade to scala 3, new draft
gennady-lebedev Mar 5, 2023
bcc9f3c
drop intermediate traits with CRUD, make path in node
gennady-lebedev Mar 5, 2023
b2ae3e3
improve reading paths, some dsl
gennady-lebedev Mar 5, 2023
c00777d
error with nested paths insertion
gennady-lebedev Mar 5, 2023
f06b6f7
use cursor instead of complex tuples
gennady-lebedev Mar 6, 2023
67834b7
apply nested commits
gennady-lebedev Mar 7, 2023
1d4fdd2
salted map draft
gennady-lebedev Mar 7, 2023
1c4958c
lil refactor
gennady-lebedev Mar 15, 2023
3495b62
compare items in node
gennady-lebedev Mar 15, 2023
bd304b0
sha-256 and sha-3 (256) wrappers
gennady-lebedev Mar 16, 2023
e4048f5
add file module
gennady-lebedev Mar 16, 2023
3b7d676
add sha-1 for future git compatibility
gennady-lebedev Mar 17, 2023
02bd18e
git module, basic implementation of GitBlob with hashing
gennady-lebedev Mar 17, 2023
a3e9375
improve git objects
gennady-lebedev Mar 17, 2023
797ff6b
make git objects (blob, tree, commit) readable and writable
gennady-lebedev Mar 17, 2023
dffa532
can read meta <sha1, type, size>, trees and some commits
gennady-lebedev Mar 22, 2023
2ffaca8
WIP: can't read deltas and initial commit
gennady-lebedev Mar 29, 2023
a35874e
update gradle to 8.1
gennady-lebedev Apr 19, 2023
75e15d0
draft read files
gennady-lebedev Apr 19, 2023
df74cb9
use Seq instead of Array in hashes
gennady-lebedev Apr 21, 2023
41bd5f8
rework for repo
gennady-lebedev Apr 23, 2023
ef9e75e
add Tx and log with hashes
gennady-lebedev Apr 23, 2023
3a69ba0
deleting draft
gennady-lebedev Apr 23, 2023
1b48bdd
improve types
gennady-lebedev Apr 23, 2023
c2c663d
delete nested when dir updating
gennady-lebedev Apr 25, 2023
e8acdb4
add ignore list
gennady-lebedev Apr 25, 2023
074c693
diff util
gennady-lebedev Apr 26, 2023
da34535
drop crashing codec module
gennady-lebedev Apr 26, 2023
45d8f0a
reset state when removing non-existent files
gennady-lebedev Apr 26, 2023
7f994f4
improve error handling basing on git project repo
gennady-lebedev Apr 29, 2023
f70bdf1
fix tree parsing
gennady-lebedev Apr 29, 2023
eeaf67c
improve commit and it's parsing
gennady-lebedev Apr 29, 2023
38aa1eb
fix blob with non-string content
gennady-lebedev Apr 29, 2023
05a4297
tags implemented
gennady-lebedev Apr 29, 2023
0db6acd
data parsing of RefDelta implemented
gennady-lebedev Apr 29, 2023
f662be0
draft size and offset for Ref Delta
gennady-lebedev May 3, 2023
4079633
make some files into example module
gennady-lebedev May 6, 2023
486fc49
ignore pack test, based on arbitrary id
gennady-lebedev May 6, 2023
e9f3c1b
restore codecs module, toss some things around
gennady-lebedev May 7, 2023
555370b
use milestone circe
gennady-lebedev May 7, 2023
215d42a
some refactoring
gennady-lebedev May 9, 2023
ccc6f2c
draft git pack delta decoder (NOT WORKING)
gennady-lebedev May 22, 2023
55c5f9c
draft tables
gennady-lebedev Jun 4, 2023
d634f13
draft tables
gennady-lebedev Jun 7, 2023
8460759
draft codecs
gennady-lebedev Jun 7, 2023
7f613db
drop redundant codecs module
gennady-lebedev Jun 7, 2023
397ebcc
refactor
gennady-lebedev Jun 7, 2023
79bdc5b
try again
gennady-lebedev Aug 29, 2023
a922224
drop old core, add codecs
gennady-lebedev Oct 26, 2023
8873d21
refactor
gennady-lebedev Oct 26, 2023
15b5703
draft Graph
gennady-lebedev Nov 13, 2023
122f43e
implement some methods
gennady-lebedev Nov 23, 2023
7e971a3
some types
gennady-lebedev Dec 17, 2023
a4b223a
prepare for auto-derivation
gennady-lebedev Dec 17, 2023
9242750
use some reflection and auto-derivation
gennady-lebedev Dec 18, 2023
8834b05
update gradle configs and dependencies versions
gennady-lebedev Jan 25, 2024
fc5c2de
fit tests for junit5 runner
gennady-lebedev Jan 25, 2024
4364076
upgrade scala to latest stable 3.3.1 and target jvm to 21
gennady-lebedev Jan 25, 2024
205b3e9
fix ci
gennady-lebedev Jan 25, 2024
65a0ae6
fix java distribution
gennady-lebedev Jan 25, 2024
1caa80b
fix workflow
gennady-lebedev Jan 25, 2024
0370c47
fix workflow
gennady-lebedev Jan 25, 2024
ed7a150
try to fix coverage report
gennady-lebedev Jan 25, 2024
d19bbcd
try to fix coverage report
gennady-lebedev Jan 26, 2024
c99694b
fix token name
gennady-lebedev Jan 26, 2024
9fdf721
optimize imports
gennady-lebedev Aug 25, 2024
005fb53
fix imports
gennady-lebedev Sep 14, 2024
e1d26e1
move example classes up
gennady-lebedev Sep 14, 2024
3459400
tree draft
gennady-lebedev Sep 14, 2024
6bb5f74
fix tests
gennady-lebedev Sep 14, 2024
a08e587
read by keys
gennady-lebedev Sep 14, 2024
ecce274
drop redundant classtags
gennady-lebedev Sep 14, 2024
77dd7e8
draft messages
gennady-lebedev Sep 14, 2024
ea90d82
draft crud on a tree
gennady-lebedev Sep 15, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 0 additions & 22 deletions .github/codecov.yml

This file was deleted.

9 changes: 5 additions & 4 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v1
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'temurin'
java-version: 21
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build, Test, Generate Scoverage Report with Gradle
Expand Down
19 changes: 10 additions & 9 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,17 @@ jobs:
TESTCONTAINERS_RYUK_DISABLED: true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v1
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'temurin'
java-version: 21
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build, Test, Generate Scoverage Report with Gradle
run: ./gradlew build test
# - name: Upload coverage to Codecov
# uses: codecov/codecov-action@v1
# with:
# directory: ./build/reports/scoverage
run: ./gradlew clean check
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4-beta
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
9 changes: 5 additions & 4 deletions .github/workflows/publish-snapshots.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@ jobs:
push-snapshots:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v1
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'temurin'
java-version: 21
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Push latest Rudiments snapshots to Maven Snapshots repo
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Hard Core

![Rudiments build](https://github.com/rudiments-dev/hardcore/workflows/Rudiments%20repository%20builds%20and%20coverage%20reports/badge.svg?branch=develop)
[![codecov](https://codecov.io/gh/rudiments-dev/hardcore/branch/develop/graph/badge.svg)](https://codecov.io/gh/rudiments-dev/hardcore)
[![codecov](https://codecov.io/gh/rudiments-dev/hardcore/graph/badge.svg?token=NG67EUNPTZ)](https://codecov.io/gh/rudiments-dev/hardcore)
[![Maven Central](https://img.shields.io/maven-central/v/dev.rudiments/implementation.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22dev.rudiments%22%20AND%20a:%22implementation%22)

Research project and bootstrap library.
65 changes: 12 additions & 53 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,61 +1,20 @@
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
}

def base_version = '0.4-SNAPSHOT'

allprojects {
group 'dev.rudiments'
version base_version

repositories {
mavenLocal()
mavenCentral()
}
plugins {
id 'dev.rudiments.scala-app-conventions'
id 'jacoco-report-aggregation'
}

def scalaModules() {
subprojects.findAll { new File(it.projectDir, 'src/main/scala').directory }
dependencies {
jacocoAggregation project(':example')
}

configure(scalaModules()) {
apply plugin: 'java'
apply plugin: 'scala'

sourceCompatibility = 17
targetCompatibility = 17

test {
reports {
html.required = true
junitXml.required = true
}
maxHeapSize = "2048m"
testLogging {
events "skipped", "failed"
exceptionFormat "full"
reporting {
reports {
testCodeCoverageReport(JacocoCoverageReport) {
testType = TestSuiteType.UNIT_TEST
}
}
}

dependencies {
implementation 'org.scala-lang:scala-library:2.13.7'
implementation 'com.typesafe.akka:akka-actor_2.13:2.6.17'
implementation 'com.typesafe.akka:akka-slf4j_2.13:2.6.17'
implementation 'com.typesafe.akka:akka-stream_2.13:2.6.17'

implementation 'com.beachape:enumeratum_2.13:1.7.0'

implementation 'com.typesafe.scala-logging:scala-logging_2.13:3.9.4'
implementation 'org.slf4j:slf4j-api:1.7.32'

testImplementation 'org.scalatest:scalatest_2.13:3.2.10'
testImplementation 'org.scalatestplus:junit-4-13_2.13:3.2.10.0'

testImplementation 'junit:junit:4.13.2'
testImplementation 'ch.qos.logback:logback-classic:1.2.7'
}
tasks.named('check') {
dependsOn tasks.named('testCodeCoverageReport', JacocoReport)
}
7 changes: 7 additions & 0 deletions buildSrc/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
plugins {
id 'groovy-gradle-plugin'
}

repositories {
gradlePluginPortal()
}
7 changes: 7 additions & 0 deletions buildSrc/settings.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
dependencyResolutionManagement {
versionCatalogs {
create('libs', { from(files("../gradle/libs.versions.toml")) })
}
}

rootProject.name = 'buildSrc'
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
plugins {
id 'dev.rudiments.scala-conventions'
id 'application'
}
55 changes: 55 additions & 0 deletions buildSrc/src/main/groovy/dev.rudiments.scala-conventions.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
plugins {
id 'java'
id 'scala'
id 'jacoco'
}

def baseVersion = '0.6-SNAPSHOT'

repositories {
mavenLocal()
mavenCentral()
}

group = 'dev.rudiments'
version = baseVersion

dependencies {
implementation 'org.scala-lang:scala3-library_3:3.3.1'
implementation 'org.slf4j:slf4j-api:2.0.11'


testImplementation 'org.scalatest:scalatest_3:3.2.17'
testImplementation 'org.scalatestplus:junit-5-10_3:3.2.17.0'

testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1'
testImplementation 'org.junit.platform:junit-platform-launcher:1.10.0'
testRuntimeOnly 'org.junit.platform:junit-platform-engine:1.10.0'

testRuntimeOnly 'ch.qos.logback:logback-classic:1.4.14'
}

java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}

test {
useJUnitPlatform {
includeEngines 'scalatest'
testLogging {
events("passed", "skipped", "failed", "standard_error")
}
}
}

jacocoTestReport {
dependsOn test
reports {
xml.required = true
html.required = false
}
}

check.dependsOn jacocoTestReport
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
plugins {
id 'dev.rudiments.scala-conventions'
id 'java-library'
}
7 changes: 7 additions & 0 deletions core/build.gradle
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
plugins {
id 'dev.rudiments.scala-lib-conventions'
}

dependencies {
implementation 'io.github.java-diff-utils:java-diff-utils:4.12'

implementation 'io.circe:circe-core_3:0.15.0-M1'
implementation 'io.circe:circe-generic_3:0.15.0-M1'
}
42 changes: 42 additions & 0 deletions core/src/main/scala/dev/rudiments/codecs/Codec.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package dev.rudiments.codecs

class Encoder[A, B](val en: A => Result[B]) extends OneWay(en) {
def apply(a: A): Result[B] = this.en(a)
def toCodec(de: B => Result[A]): Codec[A, B] = Codec(en, de)
}
object Encoder {
def apply[A, B](f: A => B): Encoder[A, B] = new Encoder(f.andThen(r => Result.Ok(r)))
//TODO if error in B
}

class Decoder[A, B](val de: B => Result[A]) extends Encoder[B, A](de) {}
object Decoder {
def apply[A, B](f: B => A): Decoder[A, B] = new Decoder(f.andThen(r => Result.Ok(r)))
}

class Codec[A, B](en: A => Result[B], de: B => Result[A]) {
def bimap[C](
f: B => C, g: C => B
): Codec[A, C] = Codec(
en.andThen(_.map(f)), g.andThen(de)
)
}

enum Result[A] {
case Error(e: Exception)
case Ok(value: A)

def map[B](f: A => B): Result[B] = this match {
case Result.Error(e) => Result.Error(e)
case Result.Ok(v) => Result.Ok(f(v))
}

def flatMap[B](f: A => Result[B]): Result[B] = this match {
case Result.Error(e) => Result.Error(e)
case Result.Ok(v) => f(v)
}
}

class OneWay[A, B](val t: A => Result[B]) {
def map[C](f: B => C): OneWay[A, C] = OneWay(t.andThen(_.map(f)))
}
63 changes: 63 additions & 0 deletions core/src/main/scala/dev/rudiments/codecs/MJ.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package dev.rudiments.codecs

import dev.rudiments.utils.Log

import scala.compiletime.{constValue, erasedValue, error, summonFrom}
import scala.deriving.Mirror

object MJ extends Log {
type En[A] = OneWay[A, TS]

given intToNumber: OneWay[Int, TS.Number] = OneWay(i => Result.Ok(TS.Number(i)))
given strToText: OneWay[String, TS.Text] = OneWay(s => Result.Ok(TS.Text(s)))
given many[S, T <: TS](using t: OneWay[S, T]): OneWay[Iterable[S], TS.Many] = OneWay(l =>
l.foldLeft(Result.Ok[TS.Many](TS.Many(Seq.empty))) { (acc, i) =>
for {
el <- t.t(i)
many <- acc
} yield TS.Many(many.of :+ el)
}
)
given index[K, V, T <: TS](using keys: OneWay[K, TS.Text], values: OneWay[V, T]): OneWay[Map[K, V], TS.Idx] = OneWay( m =>
m.foldLeft(Result.Ok[TS.Idx](TS.Idx(Map.empty))) { case (acc, (k, v)) =>
for {
key <- keys.t(k)
value <- values.t(v)
many <- acc
} yield TS.Idx(many.of + (key -> value))
}
)

inline final def summonLabelsRec[T <: Tuple]: List[String] = inline erasedValue[T] match {
case _: EmptyTuple => Nil
case _: (t *: ts) => constValue[t].asInstanceOf[String] :: summonLabelsRec[ts]
}

inline final def summonEncoder[A]: En[A] = summonFrom {
case encodeA: En[A] => encodeA
case _: Mirror.Of[A] => derived[A]
}

inline final def summonEncodersRec[A <: Tuple]: List[En[_]] =
inline erasedValue[A] match {
case _: EmptyTuple => Nil
case _: (t *: ts) => summonEncoder[t] :: summonEncodersRec[ts]
}

inline final def derived[A](using A: Mirror.Of[A]): En[A] = {
val name = constValue[A.MirroredLabel].asInstanceOf[String]
val labels = summonLabelsRec[A.MirroredElemLabels].toArray
val encoders = summonEncodersRec[A.MirroredElemTypes].toArray


log.info("{} with labels {}", name, labels.mkString("[", ", ", "]"))
???
}
}

enum TS {
case Number(i: Int)
case Text(s: String)
case Many(of: Seq[TS])
case Idx(of: Map[TS.Text, TS])
}
Loading