git-sync-js 0.6.0 → 1.0.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/src/clone.d.ts +13 -0
- package/dist/src/clone.d.ts.map +1 -0
- package/dist/src/clone.js +55 -0
- package/dist/src/clone.js.map +1 -0
- package/dist/src/commitAndSync.d.ts +21 -0
- package/dist/src/commitAndSync.d.ts.map +1 -0
- package/dist/src/commitAndSync.js +143 -0
- package/dist/src/commitAndSync.js.map +1 -0
- package/dist/{credential.d.ts → src/credential.d.ts} +3 -2
- package/dist/src/credential.d.ts.map +1 -0
- package/dist/{credential.js → src/credential.js} +7 -7
- package/dist/src/credential.js.map +1 -0
- package/dist/{defaultGitInfo.d.ts → src/defaultGitInfo.d.ts} +1 -0
- package/dist/src/defaultGitInfo.d.ts.map +1 -0
- package/dist/{defaultGitInfo.js → src/defaultGitInfo.js} +1 -0
- package/dist/src/defaultGitInfo.js.map +1 -0
- package/dist/{errors.d.ts → src/errors.d.ts} +5 -1
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/{errors.js → src/errors.js} +5 -5
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +12 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +12 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/init.d.ts +25 -0
- package/dist/src/init.d.ts.map +1 -0
- package/dist/src/init.js +22 -0
- package/dist/src/init.js.map +1 -0
- package/dist/src/initGit.d.ts +26 -0
- package/dist/src/initGit.d.ts.map +1 -0
- package/dist/src/initGit.js +40 -0
- package/dist/src/initGit.js.map +1 -0
- package/dist/{inspect.d.ts → src/inspect.d.ts} +19 -6
- package/dist/src/inspect.d.ts.map +1 -0
- package/dist/{inspect.js → src/inspect.js} +98 -44
- package/dist/src/inspect.js.map +1 -0
- package/dist/{interface.d.ts → src/interface.d.ts} +6 -0
- package/dist/src/interface.d.ts.map +1 -0
- package/dist/{interface.js → src/interface.js} +5 -0
- package/dist/src/interface.js.map +1 -0
- package/dist/{sync.d.ts → src/sync.d.ts} +17 -0
- package/dist/src/sync.d.ts.map +1 -0
- package/dist/{sync.js → src/sync.js} +47 -2
- package/dist/src/sync.js.map +1 -0
- package/dist/src/utils.d.ts +3 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +3 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/test/clone.test.d.ts +2 -0
- package/dist/test/clone.test.d.ts.map +1 -0
- package/dist/test/clone.test.js +42 -0
- package/dist/test/clone.test.js.map +1 -0
- package/dist/test/commitAndSync.test.d.ts +2 -0
- package/dist/test/commitAndSync.test.d.ts.map +1 -0
- package/dist/test/commitAndSync.test.js +27 -0
- package/dist/test/commitAndSync.test.js.map +1 -0
- package/dist/test/constants.d.ts +23 -0
- package/dist/test/constants.d.ts.map +1 -0
- package/dist/test/constants.js +51 -0
- package/dist/test/constants.js.map +1 -0
- package/dist/test/constants.test.d.ts +2 -0
- package/dist/test/constants.test.d.ts.map +1 -0
- package/dist/test/constants.test.js +7 -0
- package/dist/test/constants.test.js.map +1 -0
- package/dist/test/initGit.test.d.ts +2 -0
- package/dist/test/initGit.test.d.ts.map +1 -0
- package/dist/test/initGit.test.js +90 -0
- package/dist/test/initGit.test.js.map +1 -0
- package/dist/test/inspect.test.d.ts +2 -0
- package/dist/test/inspect.test.d.ts.map +1 -0
- package/dist/test/inspect.test.js +224 -0
- package/dist/test/inspect.test.js.map +1 -0
- package/dist/test/jest.setup.d.ts +2 -0
- package/dist/test/jest.setup.d.ts.map +1 -0
- package/dist/test/jest.setup.js +30 -0
- package/dist/test/jest.setup.js.map +1 -0
- package/dist/test/sync.test.d.ts +2 -0
- package/dist/test/sync.test.d.ts.map +1 -0
- package/dist/test/sync.test.js +75 -0
- package/dist/test/sync.test.js.map +1 -0
- package/dist/test/utils.d.ts +5 -0
- package/dist/test/utils.d.ts.map +1 -0
- package/dist/test/utils.js +38 -0
- package/dist/test/utils.js.map +1 -0
- package/package.json +24 -17
- package/dist/credential.d.ts.map +0 -1
- package/dist/credential.js.map +0 -1
- package/dist/defaultGitInfo.d.ts.map +0 -1
- package/dist/defaultGitInfo.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/index.d.ts +0 -48
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -238
- package/dist/index.js.map +0 -1
- package/dist/inspect.d.ts.map +0 -1
- package/dist/inspect.js.map +0 -1
- package/dist/interface.d.ts.map +0 -1
- package/dist/interface.js.map +0 -1
- package/dist/sync.d.ts.map +0 -1
- package/dist/sync.js.map +0 -1
|
@@ -14,7 +14,7 @@ export declare function getModifiedFileList(wikiFolderPath: string): Promise<Mod
|
|
|
14
14
|
* @param dir wiki folder path, git folder to inspect
|
|
15
15
|
* @returns remote url, without `'.git'`
|
|
16
16
|
*/
|
|
17
|
-
export declare function getRemoteUrl(dir: string): Promise<string>;
|
|
17
|
+
export declare function getRemoteUrl(dir: string, remoteName: string): Promise<string>;
|
|
18
18
|
/**
|
|
19
19
|
* get the Github Repo Name, similar to "linonetwo/wiki", string after "https://github.com/"
|
|
20
20
|
* @param remoteUrl full github repository url or other repository url
|
|
@@ -28,17 +28,19 @@ export declare function getRemoteRepoName(remoteUrl: string): string | undefined
|
|
|
28
28
|
export declare function haveLocalChanges(wikiFolderPath: string): Promise<boolean>;
|
|
29
29
|
/**
|
|
30
30
|
* Get "master" or "main" from git repo
|
|
31
|
+
*
|
|
32
|
+
* https://github.com/simonthum/git-sync/blob/31cc140df2751e09fae2941054d5b61c34e8b649/git-sync#L228-L232
|
|
31
33
|
* @param wikiFolderPath
|
|
32
34
|
*/
|
|
33
35
|
export declare function getDefaultBranchName(wikiFolderPath: string): Promise<string | undefined>;
|
|
34
|
-
export declare type SyncState = '
|
|
36
|
+
export declare type SyncState = 'noUpstreamOrBareUpstream' | 'equal' | 'ahead' | 'behind' | 'diverged';
|
|
35
37
|
/**
|
|
36
38
|
* determine sync state of repository, i.e. how the remote relates to our HEAD
|
|
37
39
|
* 'ahead' means our local state is ahead of remote, 'behind' means local state is behind of the remote
|
|
38
40
|
* @param dir repo path to test
|
|
39
41
|
*/
|
|
40
|
-
export declare function getSyncState(dir: string, defaultBranchName: string, logger?: ILogger): Promise<SyncState>;
|
|
41
|
-
export declare function assumeSync(wikiFolderPath: string, defaultBranchName: string, logger?: ILogger): Promise<void>;
|
|
42
|
+
export declare function getSyncState(dir: string, defaultBranchName: string, remoteName: string, logger?: ILogger): Promise<SyncState>;
|
|
43
|
+
export declare function assumeSync(wikiFolderPath: string, defaultBranchName: string, remoteName: string, logger?: ILogger): Promise<void>;
|
|
42
44
|
/**
|
|
43
45
|
* get various repo state in string format
|
|
44
46
|
* @param wikiFolderPath repo path to check
|
|
@@ -51,6 +53,17 @@ export declare function getGitRepositoryState(wikiFolderPath: string, logger?: I
|
|
|
51
53
|
* @param dir repo path
|
|
52
54
|
*/
|
|
53
55
|
export declare function getGitDirectory(dir: string, logger?: ILogger): Promise<string>;
|
|
54
|
-
/**
|
|
55
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Check if dir has `.git`.
|
|
58
|
+
* @param dir folder that may contains a git
|
|
59
|
+
* @param strict if is true, then dir should be the root of the git repo. Default is true
|
|
60
|
+
* @returns
|
|
61
|
+
*/
|
|
62
|
+
export declare function hasGit(dir: string, strict?: boolean): Promise<boolean>;
|
|
63
|
+
/**
|
|
64
|
+
* get things like "origin"
|
|
65
|
+
*
|
|
66
|
+
* https://github.com/simonthum/git-sync/blob/31cc140df2751e09fae2941054d5b61c34e8b649/git-sync#L238-L257
|
|
67
|
+
*/
|
|
68
|
+
export declare function getRemoteName(dir: string, branch: string): Promise<string>;
|
|
56
69
|
//# sourceMappingURL=inspect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/inspect.ts"],"names":[],"mappings":"AAQA,OAAO,EAAW,OAAO,EAAE,MAAM,aAAa,CAAC;AAM/C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoC7F;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOnF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUvE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAK/E;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB9F;AAED,oBAAY,SAAS,GAAG,0BAA0B,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC/F;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CA4BnI;AAED,wBAAsB,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvI;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAsDrG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBpF;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAYzE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAchF"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
+
/* eslint-disable security/detect-non-literal-fs-filename */
|
|
1
2
|
/* eslint-disable unicorn/prevent-abbreviations */
|
|
2
3
|
import fs from 'fs-extra';
|
|
3
4
|
import path from 'path';
|
|
4
|
-
import
|
|
5
|
+
import { listRemotes } from 'isomorphic-git';
|
|
5
6
|
import { compact } from 'lodash';
|
|
6
7
|
import { GitProcess } from 'dugite';
|
|
7
8
|
import url from 'url';
|
|
8
9
|
import { GitStep } from './interface';
|
|
9
10
|
import { AssumeSyncError, CantSyncGitNotInitializedError } from './errors';
|
|
11
|
+
const gitEscapeToEncodedUri = (str) => str.replace(/\\(\d{3})/g, (_, $1) => `%${Number.parseInt($1, 8).toString(16)}`);
|
|
12
|
+
const decodeGitEscape = (rawString) => decodeURIComponent(gitEscapeToEncodedUri(rawString));
|
|
10
13
|
/**
|
|
11
14
|
* Get modified files and modify type in a folder
|
|
12
15
|
* @param {string} wikiFolderPath location to scan git modify state
|
|
@@ -16,7 +19,8 @@ export async function getModifiedFileList(wikiFolderPath) {
|
|
|
16
19
|
const stdoutLines = stdout.split('\n');
|
|
17
20
|
const nonEmptyLines = compact(stdoutLines);
|
|
18
21
|
const statusMatrixLines = compact(nonEmptyLines.map((line) => /^\s?(\?\?|[ACMR]|[ACMR][DM])\s?(\S+.*\S+)$/.exec(line))).filter(([_, type, fileRelativePath]) => type !== undefined && fileRelativePath !== undefined);
|
|
19
|
-
return statusMatrixLines
|
|
22
|
+
return statusMatrixLines
|
|
23
|
+
.map(([_, type, rawFileRelativePath]) => {
|
|
20
24
|
/**
|
|
21
25
|
* If filename contains Chinese, it will becomes:
|
|
22
26
|
* ```js
|
|
@@ -30,29 +34,30 @@ export async function getModifiedFileList(wikiFolderPath) {
|
|
|
30
34
|
*
|
|
31
35
|
* So simply `decodeURIComponent(escape` will work on `tiddlers/\346\226\260\346\235\241\347\233\256.tid` (the logged string), but not on `tiddlers/\\346\\226\\260\\346\\235\\241\\347\\233\\256.tid` (the actual string).
|
|
32
36
|
* So how to transform actual string to logged string? Answer is `eval()` it. But we have to check is there any evil script use `;` or `,` mixed into the filename.
|
|
37
|
+
*
|
|
38
|
+
* But actually those 346 226 are in radix 8 , if we transform it to radix 16 and add prefix % we can make it uri component.
|
|
39
|
+
* And it should not be parsed in groups of three, because only the CJK between 0x0800 - 0xffff are encoded into three bytes; so we should just replace all the \\\d{3} with hexadecimal, and then give it to the decodeURIComponent to parse.
|
|
33
40
|
*/
|
|
34
41
|
const isSafeUtf8UnescapedString = rawFileRelativePath.startsWith('"') && rawFileRelativePath.endsWith('"') && !rawFileRelativePath.includes(';') && !rawFileRelativePath.includes(',');
|
|
35
|
-
|
|
36
|
-
return str.replace(/\\(\d{3})\\(\d{3})\\(\d{3})/g, (_, $1, $2, $3) => decodeURIComponent(`%${Number.parseInt($1, 8).toString(16)}%${Number.parseInt($2, 8).toString(16)}%${Number.parseInt($3, 8).toString(16)}`));
|
|
37
|
-
}
|
|
38
|
-
const fileRelativePath = isSafeUtf8UnescapedString ? decode(rawFileRelativePath).replace(/^"/, '').replace(/"$/, '') : rawFileRelativePath;
|
|
42
|
+
const fileRelativePath = isSafeUtf8UnescapedString ? decodeGitEscape(rawFileRelativePath).replace(/^"/, '').replace(/"$/, '') : rawFileRelativePath;
|
|
39
43
|
return {
|
|
40
44
|
type,
|
|
41
45
|
fileRelativePath,
|
|
42
46
|
filePath: path.join(wikiFolderPath, fileRelativePath),
|
|
43
47
|
};
|
|
44
|
-
})
|
|
48
|
+
})
|
|
49
|
+
.sort((item, item2) => item.fileRelativePath.localeCompare(item2.fileRelativePath, 'zh'));
|
|
45
50
|
}
|
|
46
51
|
/**
|
|
47
52
|
* Inspect git's remote url from folder's .git config
|
|
48
53
|
* @param dir wiki folder path, git folder to inspect
|
|
49
54
|
* @returns remote url, without `'.git'`
|
|
50
55
|
*/
|
|
51
|
-
export async function getRemoteUrl(dir) {
|
|
52
|
-
const remotes = await
|
|
53
|
-
const githubRemote = remotes.find(({ remote }) => remote ===
|
|
56
|
+
export async function getRemoteUrl(dir, remoteName) {
|
|
57
|
+
const remotes = await listRemotes({ fs, dir });
|
|
58
|
+
const githubRemote = remotes.find(({ remote }) => remote === remoteName) ?? remotes[0];
|
|
54
59
|
if ((githubRemote?.url?.length ?? 0) > 0) {
|
|
55
|
-
return githubRemote.url
|
|
60
|
+
return githubRemote.url;
|
|
56
61
|
}
|
|
57
62
|
return '';
|
|
58
63
|
}
|
|
@@ -84,24 +89,34 @@ export async function haveLocalChanges(wikiFolderPath) {
|
|
|
84
89
|
}
|
|
85
90
|
/**
|
|
86
91
|
* Get "master" or "main" from git repo
|
|
92
|
+
*
|
|
93
|
+
* https://github.com/simonthum/git-sync/blob/31cc140df2751e09fae2941054d5b61c34e8b649/git-sync#L228-L232
|
|
87
94
|
* @param wikiFolderPath
|
|
88
95
|
*/
|
|
89
96
|
export async function getDefaultBranchName(wikiFolderPath) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
97
|
+
try {
|
|
98
|
+
const { stdout } = await GitProcess.exec(['rev-parse', '--abbrev-ref', 'HEAD'], wikiFolderPath);
|
|
99
|
+
const [branchName] = stdout.split('\n');
|
|
100
|
+
// don't return empty string, so we can use ?? syntax
|
|
101
|
+
if (branchName === '') {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
return branchName;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
/**
|
|
108
|
+
* Catch "Unable to find path to repository on disk."
|
|
109
|
+
at node_modules/dugite/lib/git-process.ts:226:29
|
|
110
|
+
*/
|
|
111
|
+
return undefined;
|
|
96
112
|
}
|
|
97
|
-
return branchName;
|
|
98
113
|
}
|
|
99
114
|
/**
|
|
100
115
|
* determine sync state of repository, i.e. how the remote relates to our HEAD
|
|
101
116
|
* 'ahead' means our local state is ahead of remote, 'behind' means local state is behind of the remote
|
|
102
117
|
* @param dir repo path to test
|
|
103
118
|
*/
|
|
104
|
-
export async function getSyncState(dir, defaultBranchName, logger) {
|
|
119
|
+
export async function getSyncState(dir, defaultBranchName, remoteName, logger) {
|
|
105
120
|
const logDebug = (message, step) => logger?.debug?.(message, { functionName: 'getSyncState', step, dir });
|
|
106
121
|
const logProgress = (step) => logger?.info?.(step, {
|
|
107
122
|
functionName: 'getSyncState',
|
|
@@ -109,10 +124,14 @@ export async function getSyncState(dir, defaultBranchName, logger) {
|
|
|
109
124
|
dir,
|
|
110
125
|
});
|
|
111
126
|
logProgress(GitStep.CheckingLocalSyncState);
|
|
112
|
-
|
|
127
|
+
remoteName = remoteName ?? (await getRemoteName(dir, defaultBranchName));
|
|
128
|
+
const { stdout, stderr } = await GitProcess.exec(['rev-list', '--count', '--left-right', `${remoteName}/${defaultBranchName}...HEAD`], dir);
|
|
113
129
|
logDebug(`Checking sync state with upstream, stdout:\n${stdout}\n(stdout end)`, GitStep.CheckingLocalSyncState);
|
|
130
|
+
if (stderr.length > 0) {
|
|
131
|
+
logDebug(`Have problem checking sync state with upstream,stderr:\n${stderr}\n(stderr end)`, GitStep.CheckingLocalSyncState);
|
|
132
|
+
}
|
|
114
133
|
if (stdout === '') {
|
|
115
|
-
return '
|
|
134
|
+
return 'noUpstreamOrBareUpstream';
|
|
116
135
|
}
|
|
117
136
|
if (/0\t0/.exec(stdout) !== null) {
|
|
118
137
|
return 'equal';
|
|
@@ -125,11 +144,12 @@ export async function getSyncState(dir, defaultBranchName, logger) {
|
|
|
125
144
|
}
|
|
126
145
|
return 'diverged';
|
|
127
146
|
}
|
|
128
|
-
export async function assumeSync(wikiFolderPath, defaultBranchName, logger) {
|
|
129
|
-
|
|
147
|
+
export async function assumeSync(wikiFolderPath, defaultBranchName, remoteName, logger) {
|
|
148
|
+
const syncState = await getSyncState(wikiFolderPath, defaultBranchName, remoteName, logger);
|
|
149
|
+
if (syncState === 'equal') {
|
|
130
150
|
return;
|
|
131
151
|
}
|
|
132
|
-
throw new AssumeSyncError();
|
|
152
|
+
throw new AssumeSyncError(syncState);
|
|
133
153
|
}
|
|
134
154
|
/**
|
|
135
155
|
* get various repo state in string format
|
|
@@ -138,18 +158,23 @@ export async function assumeSync(wikiFolderPath, defaultBranchName, logger) {
|
|
|
138
158
|
* // TODO: use template literal type to get exact type of git state
|
|
139
159
|
*/
|
|
140
160
|
export async function getGitRepositoryState(wikiFolderPath, logger) {
|
|
141
|
-
|
|
142
|
-
if (typeof gitDirectory !== 'string' || gitDirectory.length === 0) {
|
|
161
|
+
if (!(await hasGit(wikiFolderPath))) {
|
|
143
162
|
return 'NOGIT';
|
|
144
163
|
}
|
|
145
|
-
const
|
|
164
|
+
const gitDirectory = await getGitDirectory(wikiFolderPath, logger);
|
|
165
|
+
const [isRebaseI, isRebaseM, isAMRebase, isMerging, isCherryPicking, isBisecting] = await Promise.all([
|
|
166
|
+
// isRebaseI
|
|
146
167
|
(await fs.lstat(path.join(gitDirectory, 'rebase-merge', 'interactive')).catch(() => ({})))?.isFile?.(),
|
|
168
|
+
// isRebaseM
|
|
147
169
|
(await fs.lstat(path.join(gitDirectory, 'rebase-merge')).catch(() => ({})))?.isDirectory?.(),
|
|
170
|
+
// isAMRebase
|
|
148
171
|
(await fs.lstat(path.join(gitDirectory, 'rebase-apply')).catch(() => ({})))?.isDirectory?.(),
|
|
172
|
+
// isMerging
|
|
149
173
|
(await fs.lstat(path.join(gitDirectory, 'MERGE_HEAD')).catch(() => ({})))?.isFile?.(),
|
|
174
|
+
// isCherryPicking
|
|
150
175
|
(await fs.lstat(path.join(gitDirectory, 'CHERRY_PICK_HEAD')).catch(() => ({})))?.isFile?.(),
|
|
176
|
+
// isBisecting
|
|
151
177
|
(await fs.lstat(path.join(gitDirectory, 'BISECT_LOG')).catch(() => ({})))?.isFile?.(),
|
|
152
|
-
(await GitProcess.exec(['rev-parse', '--is-inside-git-dir', wikiFolderPath], wikiFolderPath))?.stdout?.startsWith('true'),
|
|
153
178
|
]);
|
|
154
179
|
let result = '';
|
|
155
180
|
/* eslint-disable @typescript-eslint/strict-boolean-expressions */
|
|
@@ -173,17 +198,18 @@ export async function getGitRepositoryState(wikiFolderPath, logger) {
|
|
|
173
198
|
result += 'BISECTING';
|
|
174
199
|
}
|
|
175
200
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
201
|
+
result += (await GitProcess.exec(['rev-parse', '--is-bare-repository', wikiFolderPath], wikiFolderPath)).stdout.startsWith('true') ? '|BARE' : '';
|
|
202
|
+
/* if ((await GitProcess.exec(['rev-parse', '--is-inside-work-tree', wikiFolderPath], wikiFolderPath)).stdout.startsWith('true')) {
|
|
203
|
+
const { exitCode } = await GitProcess.exec(['diff', '--no-ext-diff', '--quiet', '--exit-code'], wikiFolderPath);
|
|
204
|
+
// 1 if there were differences and 0 means no differences.
|
|
205
|
+
if (exitCode !== 0) {
|
|
206
|
+
result += '|DIRTY';
|
|
207
|
+
}
|
|
208
|
+
} */
|
|
209
|
+
// previous above `git diff --no-ext-diff --quiet --exit-code` logic from git-sync script can only detect if an existed file changed, can't detect newly added file, so we use `haveLocalChanges` instead
|
|
210
|
+
if (await haveLocalChanges(wikiFolderPath)) {
|
|
211
|
+
result += '|DIRTY';
|
|
185
212
|
}
|
|
186
|
-
/* eslint-enable @typescript-eslint/strict-boolean-expressions */
|
|
187
213
|
return result;
|
|
188
214
|
}
|
|
189
215
|
/**
|
|
@@ -191,9 +217,9 @@ export async function getGitRepositoryState(wikiFolderPath, logger) {
|
|
|
191
217
|
* @param dir repo path
|
|
192
218
|
*/
|
|
193
219
|
export async function getGitDirectory(dir, logger) {
|
|
194
|
-
const logDebug = (message, step) => logger?.debug?.(message, { functionName: '
|
|
220
|
+
const logDebug = (message, step) => logger?.debug?.(message, { functionName: 'getGitDirectory', step, dir });
|
|
195
221
|
const logProgress = (step) => logger?.info?.(step, {
|
|
196
|
-
functionName: '
|
|
222
|
+
functionName: 'getGitDirectory',
|
|
197
223
|
step,
|
|
198
224
|
dir,
|
|
199
225
|
});
|
|
@@ -207,15 +233,23 @@ export async function getGitDirectory(dir, logger) {
|
|
|
207
233
|
const { stdout: stdout2 } = await GitProcess.exec(['rev-parse', '--git-dir', dir], dir);
|
|
208
234
|
const [gitPath2, gitPath1] = compact(stdout2.split('\n'));
|
|
209
235
|
if (gitPath2 !== undefined && gitPath1 !== undefined) {
|
|
210
|
-
return path.resolve(
|
|
236
|
+
return path.resolve(gitPath1, gitPath2);
|
|
211
237
|
}
|
|
212
238
|
}
|
|
213
239
|
throw new CantSyncGitNotInitializedError(dir);
|
|
214
240
|
}
|
|
215
|
-
/**
|
|
216
|
-
|
|
241
|
+
/**
|
|
242
|
+
* Check if dir has `.git`.
|
|
243
|
+
* @param dir folder that may contains a git
|
|
244
|
+
* @param strict if is true, then dir should be the root of the git repo. Default is true
|
|
245
|
+
* @returns
|
|
246
|
+
*/
|
|
247
|
+
export async function hasGit(dir, strict = true) {
|
|
217
248
|
try {
|
|
218
|
-
await getGitDirectory(dir);
|
|
249
|
+
const resultDir = await getGitDirectory(dir);
|
|
250
|
+
if (strict && path.dirname(resultDir) !== dir) {
|
|
251
|
+
return false;
|
|
252
|
+
}
|
|
219
253
|
}
|
|
220
254
|
catch (error) {
|
|
221
255
|
if (error instanceof CantSyncGitNotInitializedError) {
|
|
@@ -224,4 +258,24 @@ export async function hasGit(dir) {
|
|
|
224
258
|
}
|
|
225
259
|
return true;
|
|
226
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* get things like "origin"
|
|
263
|
+
*
|
|
264
|
+
* https://github.com/simonthum/git-sync/blob/31cc140df2751e09fae2941054d5b61c34e8b649/git-sync#L238-L257
|
|
265
|
+
*/
|
|
266
|
+
export async function getRemoteName(dir, branch) {
|
|
267
|
+
let { stdout } = await GitProcess.exec(['config', '--get', `branch.${branch}.pushRemote`], dir);
|
|
268
|
+
if (stdout.trim()) {
|
|
269
|
+
return stdout.trim();
|
|
270
|
+
}
|
|
271
|
+
({ stdout } = await GitProcess.exec(['config', '--get', `remote.pushDefault`], dir));
|
|
272
|
+
if (stdout.trim()) {
|
|
273
|
+
return stdout.trim();
|
|
274
|
+
}
|
|
275
|
+
({ stdout } = await GitProcess.exec(['config', '--get', `branch.${branch}.remote`], dir));
|
|
276
|
+
if (stdout.trim()) {
|
|
277
|
+
return stdout.trim();
|
|
278
|
+
}
|
|
279
|
+
return 'origin';
|
|
280
|
+
}
|
|
227
281
|
//# sourceMappingURL=inspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/inspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,7 @@ export interface ILoggerContext {
|
|
|
26
26
|
step: GitStep;
|
|
27
27
|
dir?: string;
|
|
28
28
|
remoteUrl?: string;
|
|
29
|
+
branch?: string;
|
|
29
30
|
}
|
|
30
31
|
export declare enum GitStep {
|
|
31
32
|
StartGitInitialization = "StartGitInitialization",
|
|
@@ -41,6 +42,7 @@ export declare enum GitStep {
|
|
|
41
42
|
PreparingUserInfo = "PreparingUserInfo",
|
|
42
43
|
FetchingData = "FetchingData",
|
|
43
44
|
NoNeedToSync = "NoNeedToSync",
|
|
45
|
+
NoUpstreamCantPush = "NoUpstreamCantPush",
|
|
44
46
|
LocalAheadStartUpload = "LocalAheadStartUpload",
|
|
45
47
|
CheckingLocalSyncState = "CheckingLocalSyncState",
|
|
46
48
|
CheckingLocalGitRepoSanity = "CheckingLocalGitRepoSanity",
|
|
@@ -49,7 +51,11 @@ export declare enum GitStep {
|
|
|
49
51
|
RebaseResultChecking = "RebaseResultChecking",
|
|
50
52
|
RebaseConflictNeedsResolve = "RebaseConflictNeedsResolve",
|
|
51
53
|
RebaseSucceed = "RebaseSucceed",
|
|
54
|
+
GitPush = "GitPush",
|
|
55
|
+
GitMerge = "GitMerge",
|
|
52
56
|
GitPushFailed = "GitPushFailed",
|
|
57
|
+
GitPushComplete = "GitPushComplete",
|
|
58
|
+
GitMergeComplete = "GitMergeComplete",
|
|
53
59
|
GitMergeFailed = "GitMergeFailed",
|
|
54
60
|
/** this means our algorithm have some problems */
|
|
55
61
|
SyncFailedAlgorithmWrong = "SyncFailedAlgorithmWrong",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAc,SAAQ,yBAAyB;IAC9D,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,+BAA+B;IAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,2FAA2F;IAC3F,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,qDAAqD;IACrD,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC;IAC7D,gCAAgC;IAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC;IAC7D,8CAA8C;IAC9C,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC;CAC7D;AACD,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,OAAO;IACjB,sBAAsB,2BAA2B;IACjD,sBAAsB,2BAA2B;IACjD,kCAAkC,uCAAuC;IACzE,sCAAsC,2CAA2C;IACjF,sBAAsB,2BAA2B;IACjD,WAAW,gBAAgB;IAC3B,kBAAkB,uBAAuB;IACzC,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,kBAAkB,uBAAuB;IACzC,qBAAqB,0BAA0B;IAC/C,sBAAsB,2BAA2B;IACjD,0BAA0B,+BAA+B;IACzD,oBAAoB,yBAAyB;IAC7C,uBAAuB,4BAA4B;IACnD,oBAAoB,yBAAyB;IAC7C,0BAA0B,+BAA+B;IACzD,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,cAAc,mBAAmB;IACjC,kDAAkD;IAClD,wBAAwB,6BAA6B;IACrD,2CAA2C,gDAAgD;IAC3F,qBAAqB,0BAA0B;IAC/C,6BAA6B,kCAAkC;IAC/D,uCAAuC,4CAA4C;CACpF;AACD;;GAEG;AACH,eAAO,MAAM,gBAAgB,WAA8E,CAAC"}
|
|
@@ -13,6 +13,7 @@ export var GitStep;
|
|
|
13
13
|
GitStep["PreparingUserInfo"] = "PreparingUserInfo";
|
|
14
14
|
GitStep["FetchingData"] = "FetchingData";
|
|
15
15
|
GitStep["NoNeedToSync"] = "NoNeedToSync";
|
|
16
|
+
GitStep["NoUpstreamCantPush"] = "NoUpstreamCantPush";
|
|
16
17
|
GitStep["LocalAheadStartUpload"] = "LocalAheadStartUpload";
|
|
17
18
|
GitStep["CheckingLocalSyncState"] = "CheckingLocalSyncState";
|
|
18
19
|
GitStep["CheckingLocalGitRepoSanity"] = "CheckingLocalGitRepoSanity";
|
|
@@ -21,7 +22,11 @@ export var GitStep;
|
|
|
21
22
|
GitStep["RebaseResultChecking"] = "RebaseResultChecking";
|
|
22
23
|
GitStep["RebaseConflictNeedsResolve"] = "RebaseConflictNeedsResolve";
|
|
23
24
|
GitStep["RebaseSucceed"] = "RebaseSucceed";
|
|
25
|
+
GitStep["GitPush"] = "GitPush";
|
|
26
|
+
GitStep["GitMerge"] = "GitMerge";
|
|
24
27
|
GitStep["GitPushFailed"] = "GitPushFailed";
|
|
28
|
+
GitStep["GitPushComplete"] = "GitPushComplete";
|
|
29
|
+
GitStep["GitMergeComplete"] = "GitMergeComplete";
|
|
25
30
|
GitStep["GitMergeFailed"] = "GitMergeFailed";
|
|
26
31
|
/** this means our algorithm have some problems */
|
|
27
32
|
GitStep["SyncFailedAlgorithmWrong"] = "SyncFailedAlgorithmWrong";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/interface.ts"],"names":[],"mappings":"AAiCA,MAAM,CAAN,IAAY,OAmCX;AAnCD,WAAY,OAAO;IACjB,4DAAiD,CAAA;IACjD,4DAAiD,CAAA;IACjD,oFAAyE,CAAA;IACzE,4FAAiF,CAAA;IACjF,4DAAiD,CAAA;IACjD,sCAA2B,CAAA;IAC3B,oDAAyC,CAAA;IACzC,sCAA2B,CAAA;IAC3B,sCAA2B,CAAA;IAC3B,4CAAiC,CAAA;IACjC,kDAAuC,CAAA;IACvC,wCAA6B,CAAA;IAC7B,wCAA6B,CAAA;IAC7B,oDAAyC,CAAA;IACzC,0DAA+C,CAAA;IAC/C,4DAAiD,CAAA;IACjD,oEAAyD,CAAA;IACzD,wDAA6C,CAAA;IAC7C,8DAAmD,CAAA;IACnD,wDAA6C,CAAA;IAC7C,oEAAyD,CAAA;IACzD,0CAA+B,CAAA;IAC/B,8BAAmB,CAAA;IACnB,gCAAqB,CAAA;IACrB,0CAA+B,CAAA;IAC/B,8CAAmC,CAAA;IACnC,gDAAqC,CAAA;IACrC,4CAAiC,CAAA;IACjC,kDAAkD;IAClD,gEAAqD,CAAA;IACrD,sGAA2F,CAAA;IAC3F,0DAA+C,CAAA;IAC/C,0EAA+D,CAAA;IAC/D,8FAAmF,CAAA;AACrF,CAAC,EAnCW,OAAO,KAAP,OAAO,QAmClB;AACD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -8,6 +8,23 @@ import { ILogger } from './interface';
|
|
|
8
8
|
* @param message
|
|
9
9
|
*/
|
|
10
10
|
export declare function commitFiles(dir: string, username: string, email: string, message?: string, filesToIgnore?: string[], logger?: ILogger): Promise<IGitResult>;
|
|
11
|
+
/**
|
|
12
|
+
* Git push -f origin master
|
|
13
|
+
* This does force push, to deal with `--allow-unrelated-histories` case
|
|
14
|
+
* @param dir
|
|
15
|
+
* @param username
|
|
16
|
+
* @param email
|
|
17
|
+
* @param message
|
|
18
|
+
*/
|
|
19
|
+
export declare function pushUpstream(dir: string, branch: string, remoteName: string, logger?: ILogger): Promise<IGitResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Git merge origin master
|
|
22
|
+
* @param dir
|
|
23
|
+
* @param username
|
|
24
|
+
* @param email
|
|
25
|
+
* @param message
|
|
26
|
+
*/
|
|
27
|
+
export declare function mergeUpstream(dir: string, branch: string, remoteName: string, logger?: ILogger): Promise<IGitResult>;
|
|
11
28
|
/**
|
|
12
29
|
* try to continue rebase, simply adding and committing all things, leave them to user to resolve in the TiddlyWiki later.
|
|
13
30
|
* @param dir
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,UAAU,EAAE,MAAM,QAAQ,CAAC;AAMhD,OAAO,EAAW,OAAO,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,SAA4B,EACnC,aAAa,GAAE,MAAM,EAAO,EAC5B,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,UAAU,CAAC,CAqBrB;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBzH;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAe1H;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,uBAAuB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCpJ"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { GitProcess } from 'dugite';
|
|
3
3
|
import { add, listFiles, remove } from 'isomorphic-git';
|
|
4
4
|
import fs from 'fs-extra';
|
|
5
|
-
import { CantSyncInSpecialGitStateAutoFixFailed, SyncScriptIsInDeadLoopError } from './errors';
|
|
5
|
+
import { CantSyncInSpecialGitStateAutoFixFailed, GitPullPushError, SyncScriptIsInDeadLoopError } from './errors';
|
|
6
6
|
import { getGitRepositoryState } from './inspect';
|
|
7
7
|
import { GitStep } from './interface';
|
|
8
8
|
/**
|
|
@@ -12,7 +12,7 @@ import { GitStep } from './interface';
|
|
|
12
12
|
* @param email
|
|
13
13
|
* @param message
|
|
14
14
|
*/
|
|
15
|
-
export async function commitFiles(dir, username, email, message = '
|
|
15
|
+
export async function commitFiles(dir, username, email, message = 'Commit with Git-Sync-JS', filesToIgnore = [], logger) {
|
|
16
16
|
const logProgress = (step) => logger?.info(step, {
|
|
17
17
|
functionName: 'commitFiles',
|
|
18
18
|
step,
|
|
@@ -31,6 +31,51 @@ export async function commitFiles(dir, username, email, message = 'Initialize wi
|
|
|
31
31
|
logProgress(GitStep.AddComplete);
|
|
32
32
|
return await GitProcess.exec(['commit', '-m', message, `--author="${username} <${email}>"`], dir);
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Git push -f origin master
|
|
36
|
+
* This does force push, to deal with `--allow-unrelated-histories` case
|
|
37
|
+
* @param dir
|
|
38
|
+
* @param username
|
|
39
|
+
* @param email
|
|
40
|
+
* @param message
|
|
41
|
+
*/
|
|
42
|
+
export async function pushUpstream(dir, branch, remoteName, logger) {
|
|
43
|
+
const logProgress = (step) => logger?.info(step, {
|
|
44
|
+
functionName: 'pushUpstream',
|
|
45
|
+
step,
|
|
46
|
+
dir,
|
|
47
|
+
});
|
|
48
|
+
/** when push to remote, we need to specify the local branch name and remote branch name */
|
|
49
|
+
const branchMapping = `${branch}:${branch}`;
|
|
50
|
+
logProgress(GitStep.GitPush);
|
|
51
|
+
const pushResult = await GitProcess.exec(['push', remoteName, branchMapping], dir);
|
|
52
|
+
logProgress(GitStep.GitPushComplete);
|
|
53
|
+
if (pushResult.exitCode !== 0) {
|
|
54
|
+
throw new GitPullPushError({ dir, branch, remote: remoteName }, pushResult.stdout + pushResult.stderr);
|
|
55
|
+
}
|
|
56
|
+
return pushResult;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Git merge origin master
|
|
60
|
+
* @param dir
|
|
61
|
+
* @param username
|
|
62
|
+
* @param email
|
|
63
|
+
* @param message
|
|
64
|
+
*/
|
|
65
|
+
export async function mergeUpstream(dir, branch, remoteName, logger) {
|
|
66
|
+
const logProgress = (step) => logger?.info(step, {
|
|
67
|
+
functionName: 'mergeUpstream',
|
|
68
|
+
step,
|
|
69
|
+
dir,
|
|
70
|
+
});
|
|
71
|
+
logProgress(GitStep.GitMerge);
|
|
72
|
+
const mergeResult = await GitProcess.exec(['merge', '--ff', '--ff-only', `${remoteName}/${branch}`], dir);
|
|
73
|
+
logProgress(GitStep.GitMergeComplete);
|
|
74
|
+
if (mergeResult.exitCode !== 0) {
|
|
75
|
+
throw new GitPullPushError({ dir, branch, remote: remoteName }, mergeResult.stdout + mergeResult.stderr);
|
|
76
|
+
}
|
|
77
|
+
return mergeResult;
|
|
78
|
+
}
|
|
34
79
|
/**
|
|
35
80
|
* try to continue rebase, simply adding and committing all things, leave them to user to resolve in the TiddlyWiki later.
|
|
36
81
|
* @param dir
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,QAAS,MAAM,KAAG,MAAsB,CAAC;AAC5E,eAAO,MAAM,yBAAyB,QAAS,MAAM,KAAG,MAAmC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC;AAC5E,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.test.d.ts","sourceRoot":"","sources":["../../test/clone.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/* eslint-disable security/detect-non-literal-fs-filename */
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import { getDefaultBranchName, getSyncState, hasGit, haveLocalChanges } from '../src/inspect';
|
|
4
|
+
import { defaultGitInfo } from '../src/defaultGitInfo';
|
|
5
|
+
import {
|
|
6
|
+
// eslint-disable-next-line unicorn/prevent-abbreviations
|
|
7
|
+
dir, exampleToken, gitDirectory,
|
|
8
|
+
// eslint-disable-next-line unicorn/prevent-abbreviations
|
|
9
|
+
upstreamDir, } from './constants';
|
|
10
|
+
import { clone } from '../src/clone';
|
|
11
|
+
import { addAndCommitUsingDugite, addSomeFiles } from './utils';
|
|
12
|
+
describe('clone', () => {
|
|
13
|
+
beforeEach(async () => {
|
|
14
|
+
// remove dir's .git folder in this test suit, so we have a clean folder to clone
|
|
15
|
+
await fs.remove(gitDirectory);
|
|
16
|
+
});
|
|
17
|
+
describe('with upstream', () => {
|
|
18
|
+
test('equal to upstream after clone', async () => {
|
|
19
|
+
await clone({
|
|
20
|
+
dir,
|
|
21
|
+
userInfo: { ...defaultGitInfo, accessToken: exampleToken },
|
|
22
|
+
remoteUrl: upstreamDir,
|
|
23
|
+
});
|
|
24
|
+
expect(await hasGit(dir)).toBe(true);
|
|
25
|
+
expect(await haveLocalChanges(dir)).toBe(false);
|
|
26
|
+
expect(await getSyncState(dir, defaultGitInfo.branch, defaultGitInfo.remote)).toBe('equal');
|
|
27
|
+
expect(await getDefaultBranchName(dir)).toBe(defaultGitInfo.branch);
|
|
28
|
+
});
|
|
29
|
+
test('equal to committed upstream', async () => {
|
|
30
|
+
// modify upstream
|
|
31
|
+
await addSomeFiles(upstreamDir);
|
|
32
|
+
await addAndCommitUsingDugite(upstreamDir);
|
|
33
|
+
await clone({
|
|
34
|
+
dir,
|
|
35
|
+
userInfo: { ...defaultGitInfo, accessToken: exampleToken },
|
|
36
|
+
remoteUrl: upstreamDir,
|
|
37
|
+
});
|
|
38
|
+
expect(await getSyncState(dir, defaultGitInfo.branch, defaultGitInfo.remote)).toBe('equal');
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=clone.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.test.js","sourceRoot":"","sources":["../../test/clone.test.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAa,MAAM,gBAAgB,CAAC;AACzG,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO;AACL,yDAAyD;AACzD,GAAG,EACH,YAAY,EACZ,YAAY;AACZ,yDAAyD;AACzD,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEhE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,iFAAiF;QACjF,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,KAAK,CAAC;gBACV,GAAG;gBACH,QAAQ,EAAE,EAAE,GAAG,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE;gBAC1D,SAAS,EAAE,WAAW;aACvB,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAY,OAAO,CAAC,CAAC;YACvG,MAAM,CAAC,MAAM,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC7C,kBAAkB;YAClB,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;YAChC,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAE3C,MAAM,KAAK,CAAC;gBACV,GAAG;gBACH,QAAQ,EAAE,EAAE,GAAG,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE;gBAC1D,SAAS,EAAE,WAAW;aACvB,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAY,OAAO,CAAC,CAAC;QACzG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commitAndSync.test.d.ts","sourceRoot":"","sources":["../../test/commitAndSync.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* eslint-disable security/detect-non-literal-fs-filename */
|
|
2
|
+
import { getSyncState } from '../src/inspect';
|
|
3
|
+
import { defaultGitInfo } from '../src/defaultGitInfo';
|
|
4
|
+
import {
|
|
5
|
+
// eslint-disable-next-line unicorn/prevent-abbreviations
|
|
6
|
+
dir, exampleToken,
|
|
7
|
+
// eslint-disable-next-line unicorn/prevent-abbreviations
|
|
8
|
+
upstreamDir, } from './constants';
|
|
9
|
+
import { addBareUpstream, addSomeFiles } from './utils';
|
|
10
|
+
import { commitAndSync } from '../src/commitAndSync';
|
|
11
|
+
describe('commitAndSync', () => {
|
|
12
|
+
beforeEach(async () => {
|
|
13
|
+
await addBareUpstream();
|
|
14
|
+
});
|
|
15
|
+
const getCommitAndSyncOptions = () => ({
|
|
16
|
+
dir,
|
|
17
|
+
remoteUrl: upstreamDir,
|
|
18
|
+
userInfo: { ...defaultGitInfo, accessToken: exampleToken },
|
|
19
|
+
});
|
|
20
|
+
test('equal to upstream that been commitAndSync to', async () => {
|
|
21
|
+
expect(await getSyncState(dir, defaultGitInfo.branch, defaultGitInfo.remote)).toBe('noUpstreamOrBareUpstream');
|
|
22
|
+
await addSomeFiles();
|
|
23
|
+
await commitAndSync(getCommitAndSyncOptions());
|
|
24
|
+
expect(await getSyncState(dir, defaultGitInfo.branch, defaultGitInfo.remote)).toBe('equal');
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=commitAndSync.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commitAndSync.test.js","sourceRoot":"","sources":["../../test/commitAndSync.test.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EAAE,YAAY,EAAa,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO;AACL,yDAAyD;AACzD,GAAG,EACH,YAAY;AACZ,yDAAyD;AACzD,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,aAAa,EAAyB,MAAM,sBAAsB,CAAC;AAE5E,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,eAAe,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,MAAM,uBAAuB,GAAG,GAA0B,EAAE,CAAC,CAAC;QAC5D,GAAG;QACH,SAAS,EAAE,WAAW;QACtB,QAAQ,EAAE,EAAE,GAAG,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE;KAC3D,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAY,0BAA0B,CAAC,CAAC;QAC1H,MAAM,YAAY,EAAE,CAAC;QACrB,MAAM,aAAa,CAAC,uBAAuB,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAY,OAAO,CAAC,CAAC;IACzG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|