Skip to content
Open
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
28 changes: 18 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on: [push, pull_request]
jobs:
ubuntu-gcc:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout V
uses: actions/checkout@v4
Expand All @@ -26,7 +27,8 @@ jobs:
cd gitly
v -cc gcc .

- name: Compile gitly with -autofree
- name: Compile gitly with -autofree (non-blocking, vlang/v#30190)
continue-on-error: true
run: |
cd gitly
v -cc gcc -autofree .
Expand Down Expand Up @@ -54,6 +56,7 @@ jobs:

macos-clang:
runs-on: macos-latest
timeout-minutes: 60
steps:
- name: Checkout V
uses: actions/checkout@v4
Expand All @@ -71,7 +74,8 @@ jobs:
run: |
cd gitly
v -cc clang .
- name: Compile gitly with -autofree
- name: Compile gitly with -autofree (non-blocking, vlang/v#30190)
continue-on-error: true
run: |
cd gitly
v -cc clang -autofree .
Expand All @@ -95,6 +99,7 @@ jobs:

windows-gcc:
runs-on: windows-latest
timeout-minutes: 60
env:
VFLAGS: -cc gcc
steps:
Expand All @@ -107,21 +112,23 @@ jobs:
with:
path: gitly
- name: Build V
shell: cmd
run: |
./make.bat -gcc

# Must come after "Build V": this used to run first, when neither `v`
# nor `v.exe` existed, so the referenced script could not work at all.
make.bat -gcc
# Must run after "Build V": the script shells out to `v.exe`, which
# does not exist until V is built.
- name: Install SQLite
run: .\gitly\.github\workflows\windows-install-sqlite.bat

shell: cmd
run: |
gitly\.github\workflows\windows-install-sqlite.bat
- name: Compile gitly
run: |
dir
.\v.exe -cc gcc gitly
.\v.exe -cc gcc -d sqlite gitly

ubuntu-tcc:
runs-on: ubuntu-latest
timeout-minutes: 60
env:
VFLAGS: -cc tcc -d no_backtrace -d no_segfault_handler
steps:
Expand All @@ -141,7 +148,8 @@ jobs:
make
sudo ./v symlink

- name: Compile gitly with -autofree
- name: Compile gitly with -autofree (non-blocking, vlang/v#30190)
continue-on-error: true
run: |
cd gitly
v -autofree .
Expand Down
31 changes: 15 additions & 16 deletions fork.v
Original file line number Diff line number Diff line change
Expand Up @@ -241,19 +241,18 @@ fn (mut app App) create_fork(source Repo, owner_name string, owner_user_id int,
return err
}
mut row := Repo{
git_dir: target_path
name: name
user_id: owner_user_id
user_name: owner_name
description: description
is_public: is_public && source.is_public
primary_branch: source.primary_branch
created_at: int(time.now().unix())
status: .done
git_dir: target_path
name: name
user_id: owner_user_id
user_name: owner_name
description: description
is_public: is_public && source.is_public
primary_branch: source.primary_branch
created_at: int(time.now().unix())
status: .done
disable_discussions: source.disable_discussions
disable_projects: source.disable_projects
disable_milestones: source.disable_milestones
disable_wiki: source.disable_wiki
disable_projects: source.disable_projects
disable_milestones: source.disable_milestones
}
app.add_repo(row) or {
os.rmdir_all(target_path) or {}
Expand All @@ -265,15 +264,15 @@ fn (mut app App) create_fork(source Repo, owner_name string, owner_user_id int,
}
source_relation := app.find_fork_by_repo(source.id) or { RepoFork{} }
relation := RepoFork{
repo_id: created.id
repo_id: created.id
source_repo_id: source.id
root_repo_id: if source_relation.root_repo_id > 0 {
root_repo_id: if source_relation.root_repo_id > 0 {
source_relation.root_repo_id
} else {
source.id
}
created_by: created_by
created_at: int(time.now().unix())
created_by: created_by
created_at: int(time.now().unix())
}
sql app.db {
insert relation into RepoFork
Expand Down
7 changes: 3 additions & 4 deletions gitly.v
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,8 @@ fn new_app() !&App {

mut app := &App{
// db: sqlite.connect('gitly.sqlite') or { panic(err) }
db: connect_db(conf)!
config: conf
db: connect_db(conf)!
config: conf
started_at: time.now().unix()
}

Expand Down Expand Up @@ -733,7 +733,6 @@ fn (mut app App) migrate_tables() ! {
app.add_missing_column('Repo', 'disable_discussions', db_bool_column_type())!
app.add_missing_column('Repo', 'disable_projects', db_bool_column_type())!
app.add_missing_column('Repo', 'disable_milestones', db_bool_column_type())!
app.add_missing_column('Repo', 'disable_wiki', db_bool_column_type())!
app.add_missing_column('Repo', 'is_pinned', db_bool_column_type())!
app.add_missing_column('Repo', 'created_at', 'INTEGER NOT NULL DEFAULT 0')!
app.add_missing_column('Repo', 'required_approvals', 'INTEGER NOT NULL DEFAULT 0')!
Expand Down Expand Up @@ -914,7 +913,7 @@ fn (mut app App) add_missing_column(table_name string, column_name string, colum
fn (mut ctx Context) json_success[T](result T) veb.Result {
response := api.ApiSuccessResponse[T]{
success: true
result: result
result: result
}

return ctx.json(response)
Expand Down
72 changes: 33 additions & 39 deletions repo/repo.v
Original file line number Diff line number Diff line change
Expand Up @@ -20,33 +20,31 @@ struct Repo {
is_deleted bool
users_contributed []string @[skip]
users_authorized []string @[skip]
nr_topics int @[skip]
views_count int
latest_update_hash string @[skip]
latest_update_hash string @[skip]
latest_activity time.Time @[skip]
mut:
clone_url string @[skip]
primary_branch string
webhook_secret string
tags_count int
nr_open_issues int @[orm: 'open_issues_count']
nr_open_prs int @[orm: 'open_prs_count']
nr_releases int @[orm: 'releases_count']
nr_branches int @[orm: 'branches_count']
nr_open_issues int @[sql: 'open_issues_count']
nr_open_prs int @[sql: 'open_prs_count']
nr_releases int @[sql: 'releases_count']
nr_branches int @[sql: 'branches_count']
nr_tags int
nr_stars int @[orm: 'stars_count']
nr_stars int @[sql: 'stars_count']
lang_stats []LangStat @[skip]
created_at int
nr_contributors int
labels []Label @[skip]
status RepoStatus
msg_cache map[string]string @[skip]
latest_commit_at int @[skip]
activity_buckets []int @[skip]
latest_commit_at int @[skip]
activity_buckets []int @[skip]
disable_discussions bool
disable_projects bool
disable_milestones bool
disable_wiki bool
is_pinned bool
required_approvals int
require_signed_commits bool
Expand All @@ -66,10 +64,6 @@ fn (r &Repo) milestones_enabled() bool {
return !r.disable_milestones
}

fn (r &Repo) wiki_enabled() bool {
return !r.disable_wiki
}

// log_field_separator is declared as constant in case we need to change it later
const max_free_clone_size_bytes = u64(100) * 1024 * 1024
const search_results_limit = 50
Expand Down Expand Up @@ -363,10 +357,10 @@ fn (mut app App) increment_file_views(file_id int) ! {
}!
}

fn (mut app App) update_repo_features(repo_id int, disable_discussions bool, disable_projects bool, disable_milestones bool, disable_wiki bool) ! {
fn (mut app App) update_repo_features(repo_id int, disable_discussions bool, disable_projects bool, disable_milestones bool) ! {
sql app.db {
update Repo set disable_discussions = disable_discussions, disable_projects = disable_projects,
disable_milestones = disable_milestones, disable_wiki = disable_wiki where id == repo_id
disable_milestones = disable_milestones where id == repo_id
}!
}

Expand Down Expand Up @@ -904,7 +898,7 @@ fn (mut app App) update_repo_after_ref_changes(repo_id int, updates []git.GitRef
// handle is not safe for concurrent use across threads.
fn bg_recompute_lang_stats(repo_id int, conf config.Config) {
mut app := &App{
db: connect_db(conf) or {
db: connect_db(conf) or {
eprintln('bg_recompute_lang_stats: cannot open ${db_backend_name()} db: ${err}')
return
}
Expand Down Expand Up @@ -965,10 +959,10 @@ fn (r &Repo) analyze_lang(app &App) ! {
}
lang_data := langs[lang]
d_lang_stats << LangStat{
repo_id: r.id
name: lang_data.name
pct: pct
color: lang_data.color
repo_id: r.id
name: lang_data.name
pct: pct
color: lang_data.color
lines_count: amount
}
}
Expand Down Expand Up @@ -1103,12 +1097,12 @@ fn (r &Repo) parse_ls(ls_line string, branch string) ?File {
}

return File{
name: item_name
parent_path: parent_path
repo_id: r.id
branch: branch
is_dir: item_type == 'tree'
size: if item_type == 'blob' { item_size.int() } else { 0 }
name: item_name
parent_path: parent_path
repo_id: r.id
branch: branch
is_dir: item_type == 'tree'
size: if item_type == 'blob' { item_size.int() } else { 0 }
is_size_calculated: item_type == 'blob'
}
}
Expand Down Expand Up @@ -1145,12 +1139,12 @@ fn (r &Repo) parse_top_file_line(line string, branch string) ?File {
parent_path := if parent_path_raw == '.' { '' } else { parent_path_raw }

return File{
name: item_name
parent_path: parent_path
repo_id: r.id
branch: branch
is_dir: false
size: meta_parts[3].int()
name: item_name
parent_path: parent_path
repo_id: r.id
branch: branch
is_dir: false
size: meta_parts[3].int()
is_size_calculated: true
}
}
Expand All @@ -1176,12 +1170,12 @@ fn (r &Repo) lookup_file_via_git(branch string, path string) ?File {
parent_path_raw := os.dir(item_path)
parent_path := if parent_path_raw == '.' { '' } else { parent_path_raw }
return File{
name: item_name
parent_path: parent_path
repo_id: r.id
branch: branch
is_dir: false
size: meta_parts[3].int()
name: item_name
parent_path: parent_path
repo_id: r.id
branch: branch
is_dir: false
size: meta_parts[3].int()
is_size_calculated: true
}
}
Expand Down
Loading
Loading