Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/base.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ jobs:

- name: Install dependencies
working-directory: ./moon
run: npm install
run: npm install --force

- name: Run ESLint
working-directory: ./moon
Expand Down
8 changes: 4 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ mono = { path = "mono" }
libra = { path = "libra" }

anyhow = "1.0.90"
serde = "1.0.210"
serde = "1.0.214"
serde_json = "1.0.132"
tracing = "0.1.40"
tracing-subscriber = "0.3.18"
Expand Down Expand Up @@ -72,11 +72,11 @@ colored = "2.1.0"
idgenerator = "2.0.0"
num_cpus = "1.16.0"
config = "0.14.1"
shadow-rs = "0.35.1"
reqwest = "0.12.8"
shadow-rs = "0.35.2"
reqwest = "0.12.9"
lazy_static = "1.5.0"
uuid = "1.11.0"
regex = "1.11.0"
regex = "1.11.1"
ed25519-dalek = "2.1.1"
ctrlc = "3.4.4"
git2 = "0.19.0"
Expand Down
68 changes: 11 additions & 57 deletions ceres/src/api_service/mono_api_service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@ use std::str::FromStr;

use axum::async_trait;

use callisto::db_enums::{ConvType, MergeStatus};
use callisto::db_enums::ConvType;
use callisto::{mega_blob, mega_tree, raw_blob};
use common::errors::MegaError;
use common::model::PageParams;
use jupiter::context::Context;
use jupiter::storage::batch_save_model;
use jupiter::utils::converter::generate_git_keep_with_timestamp;
Expand All @@ -19,7 +18,6 @@ use mercury::internal::object::tree::{Tree, TreeItem, TreeItemMode};

use crate::api_service::ApiHandler;
use crate::model::create_file::CreateFileInfo;
use crate::model::mr::{MRDetail, MrInfoItem};
use crate::protocol::mr::MergeRequest;

#[derive(Clone)]
Expand Down Expand Up @@ -196,41 +194,9 @@ impl ApiHandler for MonoApiService {
}

impl MonoApiService {
pub async fn mr_list(
&self,
status: &str,
pagination: PageParams,
) -> Result<(Vec<MrInfoItem>, u64), MegaError> {
let status = if status == "open" {
vec![MergeStatus::Open]
} else if status == "closed" {
vec![MergeStatus::Closed, MergeStatus::Merged]
} else {
vec![MergeStatus::Open, MergeStatus::Closed, MergeStatus::Merged]
};
let storage = self.context.services.mono_storage.clone();
let (mr_list, total) = storage
.get_mr_by_status(status, pagination.page, pagination.per_page)
.await
.unwrap();
Ok((mr_list.into_iter().map(|m| m.into()).collect(), total))
}

pub async fn mr_detail(&self, mr_link: &str) -> Result<Option<MRDetail>, MegaError> {
let storage = self.context.services.mono_storage.clone();
let model = storage.get_mr(mr_link).await.unwrap();
if let Some(model) = model {
let mut detail: MRDetail = model.into();
let conversions = storage.get_mr_conversations(mr_link).await.unwrap();
detail.conversions = conversions.into_iter().map(|x| x.into()).collect();
return Ok(Some(detail));
}
Ok(None)
}

pub async fn mr_tree_files(&self, mr_link: &str) -> Result<Vec<PathBuf>, MegaError> {
pub async fn mr_tree_files(&self, link: &str) -> Result<Vec<PathBuf>, MegaError> {
let storage = self.context.services.mono_storage.clone();
let model = storage.get_mr(mr_link).await.unwrap();
let model = self.context.mr_stg().get_mr(link).await.unwrap();
if let Some(model) = model {
let to_tree_id = storage
.get_commit_by_hash(&model.to_hash)
Expand Down Expand Up @@ -312,35 +278,23 @@ impl MonoApiService {
// update mr
mr.merge();
// add conversation
storage
.add_mr_conversation(&mr.mr_link, 0, ConvType::Merged, None)
self.context
.mr_stg()
.add_mr_conversation(&mr.link, 0, ConvType::Merged, None)
.await
.unwrap();
// update mr status last
storage.update_mr(mr.clone().into()).await.unwrap();
} else {
return Err(MegaError::with_message("ref hash conflict"));
}
Ok(())
}

pub async fn comment(&self, mr_link: &str, comment: String) -> Result<(), MegaError> {
let storage = self.context.services.mono_storage.clone();
if let Some(model) = storage.get_mr(mr_link).await.unwrap() {
storage
.add_mr_conversation(&model.mr_link, 0, ConvType::Comment, Some(comment))
self.context
.mr_stg()
.update_mr(mr.clone().into())
.await
.unwrap();
} else {
return Err(MegaError::with_message("ref hash conflict"));
}
Ok(())
}

pub async fn delete_comment(&self, id: i64) -> Result<(), MegaError> {
let storage = self.context.services.mono_storage.clone();
storage.remove_mr_conversation(id).await.unwrap();
Ok(())
}

async fn update_parent_tree(
&self,
mut path: PathBuf,
Expand Down
1 change: 0 additions & 1 deletion ceres/src/model/mod.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
pub mod create_file;
pub mod mr;
pub mod query;
pub mod tree;
21 changes: 8 additions & 13 deletions ceres/src/pack/monorepo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,12 @@ use std::{

use async_trait::async_trait;
use futures::future::join_all;
use rand::{distributions::Alphanumeric, thread_rng, Rng};
use tokio::sync::mpsc;
use tokio_stream::wrappers::ReceiverStream;

use callisto::{db_enums::ConvType, raw_blob};
use common::{errors::MegaError, utils::MEGA_BRANCH_NAME};
use jupiter::{context::Context, storage::mono_storage::MonoStorage};
use common::{errors::MegaError, utils::{self, MEGA_BRANCH_NAME}};
use jupiter::{context::Context, storage::mr_storage::MrStorage};
use mercury::internal::{object::ObjectTrait, pack::encode::PackEncoder};
use mercury::{
errors::GitError,
Expand Down Expand Up @@ -121,7 +120,7 @@ impl PackHandler for MonoRepo {
}

async fn handle_receiver(&self, receiver: Receiver<Entry>) -> Result<(), GitError> {
let storage = self.context.services.mono_storage.clone();
let storage = self.context.mr_stg();
let path_str = self.path.to_str().unwrap();

let unpack_res = self.save_entry(receiver).await;
Expand All @@ -132,16 +131,12 @@ impl PackHandler for MonoRepo {
self.handle_existing_mr(&mut mr, &storage).await
}
None => {
let mr_link: String = thread_rng()
.sample_iter(&Alphanumeric)
.take(8)
.map(char::from)
.collect();
let link: String = utils::generate_link();
let mr = MergeRequest {
path: path_str.to_owned(),
from_hash: self.from_hash.clone(),
to_hash: self.to_hash.clone(),
mr_link: mr_link.to_uppercase(),
link,
title,
..Default::default()
};
Expand Down Expand Up @@ -334,14 +329,14 @@ impl MonoRepo {
async fn handle_existing_mr(
&self,
mr: &mut MergeRequest,
storage: &MonoStorage,
storage: &MrStorage,
) -> Result<(), GitError> {
if mr.from_hash == self.from_hash {
if mr.to_hash != self.to_hash {
let comment = self.comment_for_force_update(&mr.to_hash, &self.to_hash);
mr.to_hash = self.to_hash.clone();
storage
.add_mr_conversation(&mr.mr_link, 0, ConvType::ForcePush, Some(comment))
.add_mr_conversation(&mr.link, 0, ConvType::ForcePush, Some(comment))
.await
.unwrap();
} else {
Expand All @@ -351,7 +346,7 @@ impl MonoRepo {
mr.close();
storage
.add_mr_conversation(
&mr.mr_link,
&mr.link,
0,
ConvType::Closed,
Some("Mega closed MR due to conflict".to_string()),
Expand Down
8 changes: 4 additions & 4 deletions ceres/src/protocol/mr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use common::utils::generate_id;
#[derive(Clone)]
pub struct MergeRequest {
pub id: i64,
pub mr_link: String,
pub link: String,
pub title: String,
pub status: MergeStatus,
pub merge_date: Option<NaiveDateTime>,
Expand All @@ -19,7 +19,7 @@ impl Default for MergeRequest {
fn default() -> Self {
Self {
id: generate_id(),
mr_link: String::new(),
link: String::new(),
title: String::new(),
status: MergeStatus::Open,
merge_date: None,
Expand All @@ -45,7 +45,7 @@ impl From<MergeRequest> for mega_mr::Model {
fn from(value: MergeRequest) -> Self {
Self {
id: value.id,
mr_link: value.mr_link,
link: value.link,
title: value.title,
status: value.status,
merge_date: value.merge_date,
Expand All @@ -62,7 +62,7 @@ impl From<mega_mr::Model> for MergeRequest {
fn from(value: mega_mr::Model) -> Self {
Self {
id: value.id,
mr_link: value.mr_link,
link: value.link,
title: value.title,
status: value.status,
merge_date: value.merge_date,
Expand Down
1 change: 1 addition & 0 deletions common/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ idgenerator = { workspace = true }
serde = { workspace = true }
config = { workspace = true }
envsubst = "0.2.1"
rand = { workspace = true }
10 changes: 5 additions & 5 deletions common/src/model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,23 +50,23 @@ impl<T> CommonResult<T> {
}

#[derive(Deserialize)]
pub struct PageParams {
pub struct Pagination {
pub page: u64,
pub per_page: u64,
}

impl Default for PageParams {
impl Default for Pagination {
fn default() -> Self {
PageParams {
Pagination {
page: 1,
per_page: 20,
}
}
}

#[derive(Deserialize)]
pub struct RequestParams<T> {
pub pagination: PageParams,
pub struct PageParams<T> {
pub pagination: Pagination,
pub additional: T,
}

Expand Down
10 changes: 10 additions & 0 deletions common/src/utils.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use idgenerator::IdInstance;
use rand::{distributions::Alphanumeric, thread_rng, Rng};

pub const ZERO_ID: &str = match std::str::from_utf8(&[b'0'; 40]) {
Ok(s) => s,
Expand All @@ -10,4 +11,13 @@ pub fn generate_id() -> i64 {
IdInstance::next_id()
}

pub fn generate_link() -> String {
let str: String = thread_rng()
.sample_iter(&Alphanumeric)
.take(8)
.map(char::from)
.collect();
str.to_uppercase()
}

pub const MEGA_BRANCH_NAME: &str = "refs/heads/main";
2 changes: 1 addition & 1 deletion docker/mono-pg-dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ EXPOSE 5432

# Add the database initialization script to the container
# When the container starts, PostgreSQL will automatically execute all .sql files in the docker-entrypoint-initdb.d/ directory
COPY ./sql/postgres/pg_20241023__init.sql /docker-entrypoint-initdb.d/
COPY ./sql/postgres/pg_20241029__init.sql /docker-entrypoint-initdb.d/

CMD ["postgres"]
2 changes: 1 addition & 1 deletion jupiter/callisto/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ pub mod mega_blob;
pub mod mega_commit;
pub mod mega_issue;
pub mod mega_mr;
pub mod mega_mr_conv;
pub mod mega_conversation;
pub mod mega_refs;
pub mod mega_tag;
pub mod mega_tree;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.0

use sea_orm::entity::prelude::*;

use crate::db_enums::ConvType;

#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "mega_mr_conv")]
#[sea_orm(table_name = "mega_conversation")]
pub struct Model {
#[sea_orm(primary_key, auto_increment = false)]
pub id: i64,
pub mr_link: String,
pub link: String,
pub user_id: i64,
pub conv_type: ConvType,
#[sea_orm(column_type = "Text", nullable)]
Expand Down
9 changes: 4 additions & 5 deletions jupiter/callisto/src/mega_issue.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.0

use sea_orm::entity::prelude::*;

Expand All @@ -7,11 +7,10 @@ use sea_orm::entity::prelude::*;
pub struct Model {
#[sea_orm(primary_key, auto_increment = false)]
pub id: i64,
pub number: i64,
pub link: String,
pub title: String,
pub sender_name: String,
pub sender_id: i64,
pub state: String,
pub owner: i64,
pub status: String,
pub created_at: DateTime,
pub updated_at: DateTime,
pub closed_at: Option<DateTime>,
Expand Down
2 changes: 1 addition & 1 deletion jupiter/callisto/src/mega_mr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::db_enums::MergeStatus;
pub struct Model {
#[sea_orm(primary_key, auto_increment = false)]
pub id: i64,
pub mr_link: String,
pub link: String,
pub title: String,
pub merge_date: Option<DateTime>,
pub status: MergeStatus,
Expand Down
2 changes: 1 addition & 1 deletion jupiter/callisto/src/prelude.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ pub use crate::mega_blob::Entity as MegaBlob;
pub use crate::mega_commit::Entity as MegaCommit;
pub use crate::mega_issue::Entity as MegaIssue;
pub use crate::mega_mr::Entity as MegaMr;
pub use crate::mega_mr_conv::Entity as MegaMrConv;
pub use crate::mega_conversation::Entity as MegaMrConv;
pub use crate::mega_refs::Entity as MegaRefs;
pub use crate::mega_tag::Entity as MegaTag;
pub use crate::mega_tree::Entity as MegaTree;
Expand Down
Loading