sync-upstream
Version:
A tool for synchronizing code with upstream repositories with incremental updates and parallel processing.
231 lines (226 loc) • 6.22 kB
TypeScript
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 };