UNPKG

sync-upstream

Version:

A tool for synchronizing code with upstream repositories with incremental updates and parallel processing.

231 lines (226 loc) 6.22 kB
interface RetryConfig { maxRetries: number; initialDelay: number; backoffFactor: number; } /** * 认证类型枚举 */ declare enum AuthType { /** SSH 认证 */ SSH = "ssh", /** 用户名和密码认证 */ USER_PASS = "user_pass", /** 个人访问令牌认证 */ PAT = "pat" } /** * 认证配置接口 */ interface AuthConfig { /** 认证类型 */ type: AuthType; /** 用户名,用于 USER_PASS 或 PAT 认证 */ username?: string; /** 密码,用于 USER_PASS 认证 */ password?: string; /** 个人访问令牌,用于 PAT 认证 */ token?: string; /** SSH 私钥路径,用于 SSH 认证 */ privateKeyPath?: string; /** SSH 私钥密码,如果私钥有密码保护 */ passphrase?: string; } /** * 冲突解决策略枚举 */ declare enum ConflictResolutionStrategy { /** 使用源文件覆盖目标文件 */ USE_SOURCE = "use-source", /** 保留目标文件 */ KEEP_TARGET = "keep-target", /** 尝试自动合并(仅适用于文本文件) */ AUTO_MERGE = "auto-merge", /** 提示用户解决 */ PROMPT_USER = "prompt-user", /** 创建新版本 */ CREATE_VERSION = "create-version", /** 忽略冲突 */ IGNORE = "ignore" } /** * 冲突解决配置接口 */ interface ConflictResolutionConfig { /** 默认解决策略 */ defaultStrategy: ConflictResolutionStrategy; /** 自动解决的文件类型列表 */ autoResolveTypes?: string[]; /** 是否记录冲突解决日志 */ logResolutions?: boolean; } /** * 分支策略枚举 */ declare enum BranchStrategy { /** 基于特性的分支策略 */ FEATURE = "feature", /** 基于发布的分支策略 */ RELEASE = "release", /** 基于修复的分支策略 */ HOTFIX = "hotfix", /** 基于开发的分支策略 */ DEVELOP = "develop" } /** * 分支策略配置接口 */ interface BranchStrategyConfig { /** 是否启用分支策略自动化 */ enable: boolean; /** 分支策略类型 */ strategy: BranchStrategy; /** 基础分支名称,用于创建新分支 */ baseBranch: string; /** 分支命名模式,支持变量替换 {feature}, {release}, {hotfix}, {date} 等 */ branchPattern: string; /** 是否在同步完成后自动切换回原分支 */ autoSwitchBack: boolean; /** 自动删除已合并的临时分支 */ autoDeleteMergedBranches: boolean; } /** * 缓存配置接口 */ interface CacheConfig { /** 缓存过期时间(毫秒) */ expiryMs?: number; /** 最大缓存大小(字节) */ maxSizeBytes?: number; /** 是否启用LRU缓存策略 */ lruEnabled?: boolean; /** LRU缓存最大条目数 */ lruMaxEntries?: number; /** 是否启用缓存压缩 */ compressEnabled?: boolean; /** 压缩级别 (1-9) */ compressionLevel?: number; /** 启用压缩的最小文件大小(字节) */ compressionThreshold?: number; } interface SyncOptions { upstreamRepo: string; upstreamBranch: string; companyBranch: string; syncDirs: string[]; commitMessage: string; autoPush: boolean; forceOverwrite: boolean; verbose: boolean; silent: boolean; dryRun: boolean; previewOnly: boolean; nonInteractive: boolean; concurrencyLimit: number; retryConfig: RetryConfig; conflictResolutionConfig: ConflictResolutionConfig; authConfig?: AuthConfig; includeFileTypes?: string[]; branchStrategyConfig?: BranchStrategyConfig; /** 缓存配置 */ cacheConfig?: CacheConfig; /** 是否启用自适应并发 */ adaptiveConcurrency?: boolean; } /** * 初始化缓存目录 */ declare function initializeCache(): Promise<void>; /** * 从缓存中获取数据 * @param cacheKey 缓存键 * @param options 可选配置,包含contentType用于指定内容类型和decompress用于控制解压缩 * @returns 缓存的数据,如果缓存不存在或无效则返回null */ declare function getFromCache(cacheKey: string, options?: { contentType?: string; decompress?: boolean; }): Promise<Buffer | null>; /** * 将数据写入缓存 * @param cacheKey 缓存键 * @param data 要缓存的数据 * @param retryConfig 重试配置 * @param options 可选配置 */ declare function writeToCache(cacheKey: string, data: Buffer, retryConfig?: RetryConfig, options?: { compress?: boolean; compressionLevel?: number; }): Promise<void>; /** * 查找并加载配置文件 */ declare function loadConfig(): Promise<Partial<SyncOptions>>; declare class UpstreamSyncer { private options; private git; private tempDir; private tempBranch; private progressBar; private stepCounter; private hashFile; private concurrencyLimit; private forceOverwrite; private conflictResolver; private tempResourcesCreated; private cpuCount; private adaptiveConcurrency; private originalBranch; private strategyBranch; private operationTimes; constructor(options: SyncOptions); private logStep; private handleProgress; private setupUpstream; /** * 获取上游分支更新 */ private fetchUpstream; private createTempBranch; private previewChanges; private copyDirectories; /** * 增量复制目录并应用忽略模式 */ private copyDirectoryWithIncremental; /** * 检查文件是否应该包含在同步中 */ private shouldIncludeFile; /** * 复制目录并应用忽略模式 (保留旧方法,确保兼容性) */ private copyDirectoryWithIgnore; private applyChanges; private commitChanges; private pushChanges; private cleanup; /** * 设置分支策略 */ private setupBranchStrategy; /** * 生成分支名称 */ private generateBranchName; /** * 清理分支策略相关资源 */ private cleanupBranchStrategy; /** * 检查分支是否已合并到目标分支 */ private isBranchMerged; run(): Promise<void>; } export { type SyncOptions, UpstreamSyncer, getFromCache, initializeCache, loadConfig, writeToCache };