@andrebuzeli/git-mcp 5.3.0 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +28 -1
- package/dist/config.js.map +1 -1
- package/dist/providers/provider-factory.d.ts +4 -0
- package/dist/providers/provider-factory.d.ts.map +1 -1
- package/dist/providers/provider-factory.js +15 -0
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/providers/provider-operation-handler.d.ts +22 -0
- package/dist/providers/provider-operation-handler.d.ts.map +1 -1
- package/dist/providers/provider-operation-handler.js +74 -2
- package/dist/providers/provider-operation-handler.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +18 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/git-analytics.d.ts.map +1 -1
- package/dist/tools/git-analytics.js.map +1 -1
- package/dist/tools/git-branches.d.ts.map +1 -1
- package/dist/tools/git-branches.js +9 -2
- package/dist/tools/git-branches.js.map +1 -1
- package/dist/tools/git-config.d.ts.map +1 -1
- package/dist/tools/git-config.js.map +1 -1
- package/dist/tools/git-files.d.ts.map +1 -1
- package/dist/tools/git-files.js +9 -2
- package/dist/tools/git-files.js.map +1 -1
- package/dist/tools/git-issues.d.ts.map +1 -1
- package/dist/tools/git-issues.js +9 -2
- package/dist/tools/git-issues.js.map +1 -1
- package/dist/tools/git-monitor.d.ts.map +1 -1
- package/dist/tools/git-monitor.js.map +1 -1
- package/dist/tools/git-packages.d.ts.map +1 -1
- package/dist/tools/git-packages.js +9 -2
- package/dist/tools/git-packages.js.map +1 -1
- package/dist/tools/git-pulls.d.ts.map +1 -1
- package/dist/tools/git-pulls.js +9 -2
- package/dist/tools/git-pulls.js.map +1 -1
- package/dist/tools/git-release.d.ts.map +1 -1
- package/dist/tools/git-release.js +9 -2
- package/dist/tools/git-release.js.map +1 -1
- package/dist/tools/git-remote.d.ts.map +1 -1
- package/dist/tools/git-remote.js.map +1 -1
- package/dist/tools/git-reset.d.ts.map +1 -1
- package/dist/tools/git-reset.js.map +1 -1
- package/dist/tools/git-stash.d.ts.map +1 -1
- package/dist/tools/git-stash.js.map +1 -1
- package/dist/tools/git-sync.d.ts.map +1 -1
- package/dist/tools/git-sync.js.map +1 -1
- package/dist/tools/git-tags.d.ts.map +1 -1
- package/dist/tools/git-tags.js +9 -2
- package/dist/tools/git-tags.js.map +1 -1
- package/dist/tools/git-update.d.ts.map +1 -1
- package/dist/tools/git-update.js.map +1 -1
- package/dist/tools/git-workflow.d.ts.map +1 -1
- package/dist/tools/git-workflow.js +9 -2
- package/dist/tools/git-workflow.js.map +1 -1
- package/dist/utils/data-merger.d.ts +49 -0
- package/dist/utils/data-merger.d.ts.map +1 -0
- package/dist/utils/data-merger.js +233 -0
- package/dist/utils/data-merger.js.map +1 -0
- package/dist/utils/repository-sync.d.ts +65 -0
- package/dist/utils/repository-sync.d.ts.map +1 -0
- package/dist/utils/repository-sync.js +322 -0
- package/dist/utils/repository-sync.js.map +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Merger
|
|
3
|
+
*
|
|
4
|
+
* Handles intelligent merging of data from multiple providers for read operations.
|
|
5
|
+
* Removes duplicates, combines unique fields, and maintains data integrity.
|
|
6
|
+
*/
|
|
7
|
+
import { ProviderResult } from '../providers/types.js';
|
|
8
|
+
export declare class DataMerger {
|
|
9
|
+
/**
|
|
10
|
+
* Merges list operation results from multiple providers
|
|
11
|
+
* Removes duplicates based on name/id fields and combines arrays
|
|
12
|
+
*/
|
|
13
|
+
static mergeListResults(results: ProviderResult[]): any[];
|
|
14
|
+
/**
|
|
15
|
+
* Merges get operation results from multiple providers
|
|
16
|
+
* Combines unique fields from different providers into a single object
|
|
17
|
+
*/
|
|
18
|
+
static mergeGetResults(results: ProviderResult[]): any;
|
|
19
|
+
/**
|
|
20
|
+
* Merges search operation results from multiple providers
|
|
21
|
+
* Combines search results, removes duplicates, and ranks by relevance
|
|
22
|
+
*/
|
|
23
|
+
static mergeSearchResults(results: ProviderResult[]): any[];
|
|
24
|
+
/**
|
|
25
|
+
* Generates a unique key for an item based on common identifier fields
|
|
26
|
+
*/
|
|
27
|
+
private static getItemKey;
|
|
28
|
+
/**
|
|
29
|
+
* Merges two objects, preserving unique fields from each provider
|
|
30
|
+
*/
|
|
31
|
+
private static mergeObjects;
|
|
32
|
+
/**
|
|
33
|
+
* Calculates relevance score for search results
|
|
34
|
+
*/
|
|
35
|
+
private static calculateRelevance;
|
|
36
|
+
/**
|
|
37
|
+
* Sorts items by date field (updated_at, created_at, etc.)
|
|
38
|
+
*/
|
|
39
|
+
private static sortItemsByDate;
|
|
40
|
+
/**
|
|
41
|
+
* Compares two items by date fields
|
|
42
|
+
*/
|
|
43
|
+
private static compareByDate;
|
|
44
|
+
/**
|
|
45
|
+
* Removes duplicate items from an array based on a field
|
|
46
|
+
*/
|
|
47
|
+
static removeDuplicates(items: any[], field: string): any[];
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data-merger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-merger.d.ts","sourceRoot":"","sources":["../../src/utils/data-merger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,qBAAa,UAAU;IACrB;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,GAAG,EAAE;IAkCzD;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,GAAG;IAiCtD;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,GAAG,EAAE;IAuD3D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAsBzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAmB3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAyBjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAI9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAe5B;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;CAW5D"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Data Merger
|
|
4
|
+
*
|
|
5
|
+
* Handles intelligent merging of data from multiple providers for read operations.
|
|
6
|
+
* Removes duplicates, combines unique fields, and maintains data integrity.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DataMerger = void 0;
|
|
10
|
+
class DataMerger {
|
|
11
|
+
/**
|
|
12
|
+
* Merges list operation results from multiple providers
|
|
13
|
+
* Removes duplicates based on name/id fields and combines arrays
|
|
14
|
+
*/
|
|
15
|
+
static mergeListResults(results) {
|
|
16
|
+
const allItems = [];
|
|
17
|
+
const seen = new Set();
|
|
18
|
+
// Collect all items from successful results
|
|
19
|
+
for (const result of results) {
|
|
20
|
+
if (result.success && result.data) {
|
|
21
|
+
const items = Array.isArray(result.data) ? result.data : [result.data];
|
|
22
|
+
for (const item of items) {
|
|
23
|
+
const key = this.getItemKey(item);
|
|
24
|
+
if (!seen.has(key)) {
|
|
25
|
+
seen.add(key);
|
|
26
|
+
// Add provider information to each item
|
|
27
|
+
allItems.push({
|
|
28
|
+
...item,
|
|
29
|
+
_providers: [result.provider]
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Item already exists, add provider to existing item
|
|
34
|
+
const existingItem = allItems.find(i => this.getItemKey(i) === key);
|
|
35
|
+
if (existingItem && !existingItem._providers.includes(result.provider)) {
|
|
36
|
+
existingItem._providers.push(result.provider);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Sort by updated_at or created_at if available
|
|
43
|
+
return this.sortItemsByDate(allItems);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Merges get operation results from multiple providers
|
|
47
|
+
* Combines unique fields from different providers into a single object
|
|
48
|
+
*/
|
|
49
|
+
static mergeGetResults(results) {
|
|
50
|
+
if (results.length === 0)
|
|
51
|
+
return null;
|
|
52
|
+
if (results.length === 1)
|
|
53
|
+
return results[0].success ? results[0].data : null;
|
|
54
|
+
// Start with the first successful result
|
|
55
|
+
let mergedData = null;
|
|
56
|
+
const providers = [];
|
|
57
|
+
for (const result of results) {
|
|
58
|
+
if (result.success && result.data) {
|
|
59
|
+
providers.push(result.provider);
|
|
60
|
+
if (!mergedData) {
|
|
61
|
+
mergedData = { ...result.data };
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
// Merge unique fields from this provider
|
|
65
|
+
mergedData = this.mergeObjects(mergedData, result.data, result.provider);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (mergedData) {
|
|
70
|
+
mergedData._providers = providers;
|
|
71
|
+
mergedData._mergeInfo = {
|
|
72
|
+
totalProviders: results.length,
|
|
73
|
+
successfulProviders: providers.length,
|
|
74
|
+
merged: true
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return mergedData;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Merges search operation results from multiple providers
|
|
81
|
+
* Combines search results, removes duplicates, and ranks by relevance
|
|
82
|
+
*/
|
|
83
|
+
static mergeSearchResults(results) {
|
|
84
|
+
const allItems = [];
|
|
85
|
+
const seen = new Set();
|
|
86
|
+
// Collect all items from successful results
|
|
87
|
+
for (const result of results) {
|
|
88
|
+
if (result.success && result.data) {
|
|
89
|
+
const items = Array.isArray(result.data) ? result.data : [result.data];
|
|
90
|
+
for (const item of items) {
|
|
91
|
+
const key = this.getItemKey(item);
|
|
92
|
+
if (!seen.has(key)) {
|
|
93
|
+
seen.add(key);
|
|
94
|
+
// Add provider information and search metadata
|
|
95
|
+
allItems.push({
|
|
96
|
+
...item,
|
|
97
|
+
_providers: [result.provider],
|
|
98
|
+
_search: {
|
|
99
|
+
provider: result.provider,
|
|
100
|
+
relevance: this.calculateRelevance(item, result.provider)
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// Item already exists, add provider to existing item
|
|
106
|
+
const existingItem = allItems.find(i => this.getItemKey(i) === key);
|
|
107
|
+
if (existingItem) {
|
|
108
|
+
if (!existingItem._providers.includes(result.provider)) {
|
|
109
|
+
existingItem._providers.push(result.provider);
|
|
110
|
+
}
|
|
111
|
+
// Update search info if this provider has better relevance
|
|
112
|
+
const newRelevance = this.calculateRelevance(item, result.provider);
|
|
113
|
+
if (newRelevance > existingItem._search.relevance) {
|
|
114
|
+
existingItem._search = {
|
|
115
|
+
provider: result.provider,
|
|
116
|
+
relevance: newRelevance
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Sort by relevance score, then by date
|
|
125
|
+
return allItems.sort((a, b) => {
|
|
126
|
+
// Higher relevance first
|
|
127
|
+
if (b._search.relevance !== a._search.relevance) {
|
|
128
|
+
return b._search.relevance - a._search.relevance;
|
|
129
|
+
}
|
|
130
|
+
// Then by date if available
|
|
131
|
+
return this.compareByDate(a, b);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Generates a unique key for an item based on common identifier fields
|
|
136
|
+
*/
|
|
137
|
+
static getItemKey(item) {
|
|
138
|
+
// Try different identifier fields in order of preference
|
|
139
|
+
const possibleKeys = [
|
|
140
|
+
item.id,
|
|
141
|
+
item.name,
|
|
142
|
+
item.full_name,
|
|
143
|
+
item.title,
|
|
144
|
+
`${item.owner?.login || item.owner}/${item.name || item.repo}`,
|
|
145
|
+
item.sha, // for commits
|
|
146
|
+
item.number, // for issues/PRs
|
|
147
|
+
JSON.stringify(item) // fallback
|
|
148
|
+
];
|
|
149
|
+
for (const key of possibleKeys) {
|
|
150
|
+
if (key && typeof key === 'string') {
|
|
151
|
+
return key;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return Math.random().toString(36); // ultimate fallback
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Merges two objects, preserving unique fields from each provider
|
|
158
|
+
*/
|
|
159
|
+
static mergeObjects(baseObj, newObj, provider) {
|
|
160
|
+
const merged = { ...baseObj };
|
|
161
|
+
for (const [key, value] of Object.entries(newObj)) {
|
|
162
|
+
// If field doesn't exist in base, add it
|
|
163
|
+
if (!(key in merged)) {
|
|
164
|
+
merged[key] = value;
|
|
165
|
+
merged[`_${key}_${provider}`] = value; // Also keep provider-specific version
|
|
166
|
+
}
|
|
167
|
+
// If field exists but is different, keep both versions
|
|
168
|
+
else if (merged[key] !== value) {
|
|
169
|
+
merged[`_${key}_${provider}`] = value;
|
|
170
|
+
merged[`_${key}_conflict`] = true;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return merged;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Calculates relevance score for search results
|
|
177
|
+
*/
|
|
178
|
+
static calculateRelevance(item, provider) {
|
|
179
|
+
let score = 0;
|
|
180
|
+
// Base score by provider (GitHub slightly preferred)
|
|
181
|
+
if (provider === 'github') {
|
|
182
|
+
score += 1;
|
|
183
|
+
}
|
|
184
|
+
// Score by item type
|
|
185
|
+
if (item.stargazers_count !== undefined) {
|
|
186
|
+
score += Math.min(item.stargazers_count / 100, 10); // Max 10 points
|
|
187
|
+
}
|
|
188
|
+
if (item.forks_count !== undefined) {
|
|
189
|
+
score += Math.min(item.forks_count / 50, 5); // Max 5 points
|
|
190
|
+
}
|
|
191
|
+
if (item.updated_at) {
|
|
192
|
+
const daysSinceUpdate = (Date.now() - new Date(item.updated_at).getTime()) / (1000 * 60 * 60 * 24);
|
|
193
|
+
score += Math.max(0, 5 - daysSinceUpdate / 30); // Max 5 points, decays over time
|
|
194
|
+
}
|
|
195
|
+
return score;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Sorts items by date field (updated_at, created_at, etc.)
|
|
199
|
+
*/
|
|
200
|
+
static sortItemsByDate(items) {
|
|
201
|
+
return items.sort((a, b) => this.compareByDate(a, b));
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Compares two items by date fields
|
|
205
|
+
*/
|
|
206
|
+
static compareByDate(a, b) {
|
|
207
|
+
const dateFields = ['updated_at', 'created_at', 'pushed_at', 'committed_date'];
|
|
208
|
+
for (const field of dateFields) {
|
|
209
|
+
const dateA = a[field] ? new Date(a[field]).getTime() : 0;
|
|
210
|
+
const dateB = b[field] ? new Date(b[field]).getTime() : 0;
|
|
211
|
+
if (dateA !== dateB) {
|
|
212
|
+
return dateB - dateA; // Newest first
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return 0;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Removes duplicate items from an array based on a field
|
|
219
|
+
*/
|
|
220
|
+
static removeDuplicates(items, field) {
|
|
221
|
+
const seen = new Set();
|
|
222
|
+
return items.filter(item => {
|
|
223
|
+
const value = item[field];
|
|
224
|
+
if (seen.has(value)) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
seen.add(value);
|
|
228
|
+
return true;
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
exports.DataMerger = DataMerger;
|
|
233
|
+
//# sourceMappingURL=data-merger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-merger.js","sourceRoot":"","sources":["../../src/utils/data-merger.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,MAAa,UAAU;IACrB;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAyB;QAC/C,MAAM,QAAQ,GAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,4CAA4C;QAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAEvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAElC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACd,wCAAwC;wBACxC,QAAQ,CAAC,IAAI,CAAC;4BACZ,GAAG,IAAI;4BACP,UAAU,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;yBAC9B,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,qDAAqD;wBACrD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;wBACpE,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACvE,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;wBAChD,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,OAAyB;QAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAE7E,yCAAyC;QACzC,IAAI,UAAU,GAAQ,IAAI,CAAC;QAC3B,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAClC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAEhC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,UAAU,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAClC,CAAC;qBAAM,CAAC;oBACN,yCAAyC;oBACzC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;YAClC,UAAU,CAAC,UAAU,GAAG;gBACtB,cAAc,EAAE,OAAO,CAAC,MAAM;gBAC9B,mBAAmB,EAAE,SAAS,CAAC,MAAM;gBACrC,MAAM,EAAE,IAAI;aACb,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAyB;QACjD,MAAM,QAAQ,GAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAE/B,4CAA4C;QAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAClC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAEvE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAElC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACd,+CAA+C;wBAC/C,QAAQ,CAAC,IAAI,CAAC;4BACZ,GAAG,IAAI;4BACP,UAAU,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;4BAC7B,OAAO,EAAE;gCACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;gCACzB,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC;6BAC1D;yBACF,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,qDAAqD;wBACrD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;wBACpE,IAAI,YAAY,EAAE,CAAC;4BACjB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gCACvD,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;4BAChD,CAAC;4BACD,2DAA2D;4BAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;4BACpE,IAAI,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gCAClD,YAAY,CAAC,OAAO,GAAG;oCACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oCACzB,SAAS,EAAE,YAAY;iCACxB,CAAC;4BACJ,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5B,yBAAyB;YACzB,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBAChD,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;YACnD,CAAC;YACD,4BAA4B;YAC5B,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,UAAU,CAAC,IAAS;QACjC,yDAAyD;QACzD,MAAM,YAAY,GAAG;YACnB,IAAI,CAAC,EAAE;YACP,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,SAAS;YACd,IAAI,CAAC,KAAK;YACV,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;YAC9D,IAAI,CAAC,GAAG,EAAE,cAAc;YACxB,IAAI,CAAC,MAAM,EAAE,iBAAiB;YAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW;SACjC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACnC,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB;IACzD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,YAAY,CAAC,OAAY,EAAE,MAAW,EAAE,QAAgB;QACrE,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAE9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,yCAAyC;YACzC,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACpB,MAAM,CAAC,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,sCAAsC;YAC/E,CAAC;YACD,uDAAuD;iBAClD,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC;gBACtC,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC;YACpC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,kBAAkB,CAAC,IAAS,EAAE,QAAgB;QAC3D,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,qDAAqD;QACrD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QAED,qBAAqB;QACrB,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACxC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB;QACtE,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;QAC9D,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YACnG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC,iCAAiC;QACnF,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,eAAe,CAAC,KAAY;QACzC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,aAAa,CAAC,CAAM,EAAE,CAAM;QACzC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;QAE/E,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAE1D,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBACpB,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe;YACvC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAY,EAAE,KAAa;QACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAzPD,gCAyPC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository Synchronizer
|
|
3
|
+
*
|
|
4
|
+
* Handles automatic synchronization of repositories between GitHub and Gitea providers.
|
|
5
|
+
* Ensures repositories exist on both providers and keeps settings in sync.
|
|
6
|
+
*/
|
|
7
|
+
import { ProviderConfig } from '../providers/types.js';
|
|
8
|
+
export interface SyncResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
synchronized: boolean;
|
|
11
|
+
actions: string[];
|
|
12
|
+
errors: string[];
|
|
13
|
+
details?: any;
|
|
14
|
+
}
|
|
15
|
+
export declare class RepositorySynchronizer {
|
|
16
|
+
private githubProvider?;
|
|
17
|
+
private giteaProvider?;
|
|
18
|
+
private gitExecutor;
|
|
19
|
+
constructor(config: ProviderConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Ensures repository exists on both providers, creating if necessary
|
|
22
|
+
*/
|
|
23
|
+
ensureRepositoryExists(repoName: string, owner: string): Promise<SyncResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Syncs repository settings (description, visibility, etc.) between providers
|
|
26
|
+
*/
|
|
27
|
+
syncRepositorySettings(repoName: string, owner: string): Promise<SyncResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Configures local git remotes for both providers
|
|
30
|
+
*/
|
|
31
|
+
syncRemotes(projectPath: string, repoName: string, owner: string): Promise<SyncResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Attempts to recover from operation failures by creating missing resources
|
|
34
|
+
*/
|
|
35
|
+
attemptRecovery(operation: string, params: any, failedProvider: string): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Checks if repository exists on specified provider
|
|
38
|
+
*/
|
|
39
|
+
private checkRepositoryExists;
|
|
40
|
+
/**
|
|
41
|
+
* Creates repository on specified provider
|
|
42
|
+
*/
|
|
43
|
+
private createRepository;
|
|
44
|
+
/**
|
|
45
|
+
* Gets repository information from specified provider
|
|
46
|
+
*/
|
|
47
|
+
private getRepositoryInfo;
|
|
48
|
+
/**
|
|
49
|
+
* Gets repository clone URL from specified provider
|
|
50
|
+
*/
|
|
51
|
+
private getRepositoryUrl;
|
|
52
|
+
/**
|
|
53
|
+
* Syncs repository settings from source to target
|
|
54
|
+
*/
|
|
55
|
+
private syncSettingsFromSource;
|
|
56
|
+
/**
|
|
57
|
+
* Updates repository settings on specified provider
|
|
58
|
+
*/
|
|
59
|
+
private updateRepositorySettings;
|
|
60
|
+
/**
|
|
61
|
+
* Check if a remote exists in the repository
|
|
62
|
+
*/
|
|
63
|
+
private checkRemoteExists;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=repository-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository-sync.d.ts","sourceRoot":"","sources":["../../src/utils/repository-sync.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKvD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,WAAW,CAAqB;gBAE5B,MAAM,EAAE,cAAc;IAUlC;;OAEG;IACG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAkDlF;;OAEG;IACG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAkClF;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsD5F;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkB/F;;OAEG;YACW,qBAAqB;IAYnC;;OAEG;YACW,gBAAgB;IAoB9B;;OAEG;YACW,iBAAiB;IAiB/B;;OAEG;YACW,gBAAgB;IAuB9B;;OAEG;YACW,sBAAsB;IA+BpC;;OAEG;YACW,wBAAwB;IAiBtC;;OAEG;YACW,iBAAiB;CAYhC"}
|