Skip to content

Commit da3821b

Browse files
Merge pull request #380 from feat/git-workflow-core into beta
feat(git): extend source control with worktrees, stashes, conflicts and identities
2 parents 33799e0 + 53238a6 commit da3821b

89 files changed

Lines changed: 7687 additions & 776 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎backend/src/db/queries.ts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { Repo, CreateRepoInput } from '../types/repo'
33
import { getReposPath } from '@opencode-manager/shared/config/env'
44
import { ASSISTANT_REPO_ID, ASSISTANT_REPO_PATH, getRepoDisplayName } from '@opencode-manager/shared/utils'
55
import { getErrorMessage } from '../utils/error-utils'
6+
import { canonicalPathSync } from '../utils/fs-safe'
67
import path from 'path'
78

89
interface RepoRow {
@@ -93,12 +94,12 @@ export function setRepoSandboxGitCredentials(db: Database, repoId: number, allow
9394
}
9495

9596
export function getRepoByDirectory(db: Database, directory: string): Repo | null {
96-
const resolvedDirectory = path.resolve(directory)
97+
const resolvedDirectory = canonicalPathSync(path.resolve(directory))
9798
const repos = listRepos(db)
9899

99100
return repos
100101
.filter((repo) => {
101-
const resolvedRepoPath = path.resolve(repo.fullPath)
102+
const resolvedRepoPath = canonicalPathSync(path.resolve(repo.fullPath))
102103
const relativePath = path.relative(resolvedRepoPath, resolvedDirectory)
103104
return relativePath === '' || (!!relativePath && !relativePath.startsWith('..') && !path.isAbsolute(relativePath))
104105
})

‎backend/src/db/schedules.ts‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,11 @@ export function updateScheduleJobRunState(db: Database, repoId: number, jobId: n
343343
stmt.run(values.lastRunAt, values.nextRunAt ?? null, Date.now(), repoId, jobId)
344344
}
345345

346+
export function updateScheduleJobsBranch(db: Database, repoId: number, from: string, to: string): number {
347+
const stmt = db.prepare('UPDATE schedule_jobs SET branch = ?, updated_at = ? WHERE repo_id = ? AND branch = ?')
348+
return stmt.run(to, Date.now(), repoId, from).changes
349+
}
350+
346351
export function createScheduleRun(
347352
db: Database,
348353
input: {

‎backend/src/index.ts‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ import { opencodeServerManager } from './services/opencode-single-server'
4848
import { createOpenCodeClient } from './services/opencode/client'
4949
import { NotificationService } from './services/notification'
5050
import { ScheduleRunner, ScheduleService } from './services/schedules'
51-
import { CredentialProvider } from './services/credential-provider'
5251
import { ScheduleWorktreeManager } from './services/schedule-worktree'
5352
import { migrateGlobalSkills } from './services/skills'
5453
import { installAssistantWorkspace } from './services/assistant-mode'
@@ -220,9 +219,7 @@ try {
220219
logger.error('Failed to initialize workspace:', error)
221220
}
222221

223-
const settingsServiceForSchedules = new SettingsService(db)
224-
const credentialProvider = new CredentialProvider(db)
225-
const scheduleWorktreeManager = new ScheduleWorktreeManager(gitAuthService, settingsServiceForSchedules, credentialProvider, db)
222+
const scheduleWorktreeManager = new ScheduleWorktreeManager(gitAuthService, db)
226223
const scheduleService = new ScheduleService(db, openCodeClient, scheduleWorktreeManager)
227224
const scheduleRunnerInstance = new ScheduleRunner(scheduleService)
228225

‎backend/src/routes/internal/git-credentials.ts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ export function createInternalGitCredentialsRoutes(db: Database) {
77

88
app.get('/gh-env', (c) => {
99
const provider = new CredentialProvider(db)
10-
return c.json(provider.getGhCliEnv({ cwd: c.req.query('cwd') }))
10+
const cwd = c.req.query('cwd')
11+
return c.json(provider.getGhCliEnv({ cwd }))
1112
})
1213

1314
return app

0 commit comments

Comments
 (0)