react-native-platform-override 0.4.6 → 0.81.0-preview.10

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.
Files changed (73) hide show
  1. package/bin.js +1 -2
  2. package/lib-commonjs/Api.d.ts +57 -56
  3. package/lib-commonjs/Api.js +187 -167
  4. package/lib-commonjs/Api.js.map +1 -1
  5. package/lib-commonjs/BatchingQueue.d.ts +15 -15
  6. package/lib-commonjs/BatchingQueue.js +57 -57
  7. package/lib-commonjs/BatchingQueue.js.map +1 -1
  8. package/lib-commonjs/Cli.d.ts +7 -7
  9. package/lib-commonjs/Cli.js +323 -291
  10. package/lib-commonjs/Cli.js.map +1 -1
  11. package/lib-commonjs/CrossProcessLock.d.ts +44 -44
  12. package/lib-commonjs/CrossProcessLock.js +147 -144
  13. package/lib-commonjs/CrossProcessLock.js.map +1 -1
  14. package/lib-commonjs/DiffStrategy.d.ts +24 -24
  15. package/lib-commonjs/DiffStrategy.js +34 -34
  16. package/lib-commonjs/DiffStrategy.js.map +1 -1
  17. package/lib-commonjs/FileRepository.d.ts +63 -62
  18. package/lib-commonjs/FileRepository.js +21 -21
  19. package/lib-commonjs/FileRepository.js.map +1 -1
  20. package/lib-commonjs/FileSearch.d.ts +21 -21
  21. package/lib-commonjs/FileSearch.js +77 -91
  22. package/lib-commonjs/FileSearch.js.map +1 -1
  23. package/lib-commonjs/FileSystemRepository.d.ts +21 -20
  24. package/lib-commonjs/FileSystemRepository.js +62 -59
  25. package/lib-commonjs/FileSystemRepository.js.map +1 -1
  26. package/lib-commonjs/GitReactFileRepository.d.ts +57 -58
  27. package/lib-commonjs/GitReactFileRepository.js +202 -208
  28. package/lib-commonjs/GitReactFileRepository.js.map +1 -1
  29. package/lib-commonjs/Hash.d.ts +34 -33
  30. package/lib-commonjs/Hash.js +81 -81
  31. package/lib-commonjs/Hash.js.map +1 -1
  32. package/lib-commonjs/Manifest.d.ts +80 -80
  33. package/lib-commonjs/Manifest.js +157 -154
  34. package/lib-commonjs/Manifest.js.map +1 -1
  35. package/lib-commonjs/Override.d.ts +182 -182
  36. package/lib-commonjs/Override.js +248 -245
  37. package/lib-commonjs/Override.js.map +1 -1
  38. package/lib-commonjs/OverrideFactory.d.ts +33 -33
  39. package/lib-commonjs/OverrideFactory.js +85 -70
  40. package/lib-commonjs/OverrideFactory.js.map +1 -1
  41. package/lib-commonjs/OverridePrompt.d.ts +30 -30
  42. package/lib-commonjs/OverridePrompt.js +130 -104
  43. package/lib-commonjs/OverridePrompt.js.map +1 -1
  44. package/lib-commonjs/PackageUtils.d.ts +15 -15
  45. package/lib-commonjs/PackageUtils.js +40 -38
  46. package/lib-commonjs/PackageUtils.js.map +1 -1
  47. package/lib-commonjs/PathUtils.d.ts +14 -14
  48. package/lib-commonjs/PathUtils.js +31 -28
  49. package/lib-commonjs/PathUtils.js.map +1 -1
  50. package/lib-commonjs/Serialized.d.ts +158 -158
  51. package/lib-commonjs/Serialized.js +145 -119
  52. package/lib-commonjs/Serialized.js.map +1 -1
  53. package/lib-commonjs/UpgradeStrategy.d.ts +39 -39
  54. package/lib-commonjs/UpgradeStrategy.js +102 -99
  55. package/lib-commonjs/UpgradeStrategy.js.map +1 -1
  56. package/lib-commonjs/ValidationStrategy.d.ts +57 -57
  57. package/lib-commonjs/ValidationStrategy.js +124 -124
  58. package/lib-commonjs/ValidationStrategy.js.map +1 -1
  59. package/lib-commonjs/refFromVersion.d.ts +10 -0
  60. package/lib-commonjs/refFromVersion.js +99 -0
  61. package/lib-commonjs/refFromVersion.js.map +1 -0
  62. package/lib-commonjs/scripts/generateManifest.d.ts +7 -7
  63. package/lib-commonjs/scripts/generateManifest.js +196 -170
  64. package/lib-commonjs/scripts/generateManifest.js.map +1 -1
  65. package/lib-commonjs/scripts/hashFile.d.ts +7 -7
  66. package/lib-commonjs/scripts/hashFile.js +17 -14
  67. package/lib-commonjs/scripts/hashFile.js.map +1 -1
  68. package/lib-commonjs/scripts/testLocks.d.ts +1 -1
  69. package/lib-commonjs/scripts/testLocks.js +29 -26
  70. package/lib-commonjs/scripts/testLocks.js.map +1 -1
  71. package/package.json +53 -43
  72. package/CHANGELOG.json +0 -524
  73. package/CHANGELOG.md +0 -230
@@ -1,58 +1,57 @@
1
- /**
2
- * Copyright (c) Microsoft Corporation.
3
- * Licensed under the MIT License.
4
- *
5
- * @format
6
- */
7
- /// <reference types="node" />
8
- import { VersionedReactFileRepository } from './FileRepository';
9
- /**
10
- * Retrives React Native files using the React Native Github repo. Switching
11
- * between getting file contents of different versions may be slow.
12
- */
13
- export default class GitReactFileRepository implements VersionedReactFileRepository {
14
- private readonly fileRepo;
15
- private readonly gitClient;
16
- private checkedOutVersion?;
17
- private static githubToken?;
18
- private readonly batchingQueue;
19
- private constructor();
20
- /**
21
- * Asynchronusly initialize the scratch repository, creating a new Git repo is needed
22
- * @param gitDirectory optional repo directory
23
- */
24
- static createAndInit(gitDirectory?: string): Promise<GitReactFileRepository>;
25
- /**
26
- * Set a GitHub API token for all instances of GitReactFileRepository to use
27
- * when making requests.
28
- * @param token a GitHub PAT
29
- */
30
- static setGithubToken(token: string): void;
31
- listFiles(globs: string[] | undefined, reactNativeVersion: string): Promise<string[]>;
32
- readFile(filename: string, reactNativeVersion: string): Promise<Buffer | null>;
33
- stat(filename: string, reactNativeVersion: string): Promise<'file' | 'directory' | 'none'>;
34
- /**
35
- * Generate a Git-style patch to transform the given file into the given
36
- * content.
37
- */
38
- generatePatch(filename: string, reactNativeVersion: string, newContent: Buffer): Promise<string>;
39
- /**
40
- * Apply a patch to the given file, returning the merged result, which may
41
- * include conflict markers. The underlying file is not mutated.
42
- *
43
- * Git is unable to generate a representation with conflict markers in the
44
- * event of binary merge conflicts. In this case a null Buffer is returned.
45
- */
46
- getPatchedFile(filename: string, reactNativeVersion: string, patchContent: string): Promise<{
47
- patchedFile: Buffer | null;
48
- hasConflicts: boolean;
49
- }>;
50
- private usingVersion;
51
- private checkoutVersion;
52
- private tryCheckoutLocal;
53
- private fetchAndCheckout;
54
- private refFromVersion;
55
- private longCommitHash;
56
- private static defaultGitDirectory;
57
- private ensureFile;
58
- }
1
+ /**
2
+ * Copyright (c) Microsoft Corporation.
3
+ * Licensed under the MIT License.
4
+ *
5
+ * @format
6
+ */
7
+ /// <reference types="node" />
8
+ /// <reference types="node" />
9
+ import { VersionedReactFileRepository } from './FileRepository';
10
+ /**
11
+ * Retrieves React Native files using the React Native Github repo. Switching
12
+ * between getting file contents of different versions may be slow.
13
+ */
14
+ export default class GitReactFileRepository implements VersionedReactFileRepository {
15
+ private readonly fileRepo;
16
+ private readonly gitClient;
17
+ private checkedOutVersion?;
18
+ private static githubToken?;
19
+ private readonly batchingQueue;
20
+ private constructor();
21
+ /**
22
+ * Asynchronously initialize the scratch repository, creating a new Git repo is needed
23
+ * @param gitDirectory optional repo directory
24
+ */
25
+ static createAndInit(gitDirectory?: string): Promise<GitReactFileRepository>;
26
+ /**
27
+ * Set a GitHub API token for all instances of GitReactFileRepository to use
28
+ * when making requests.
29
+ * @param token a GitHub PAT
30
+ */
31
+ static setGithubToken(token: string): void;
32
+ listFiles(globs: string[] | undefined, reactNativeVersion: string): Promise<string[]>;
33
+ readFile(filename: string, reactNativeVersion: string): Promise<Buffer | null>;
34
+ stat(filename: string, reactNativeVersion: string): Promise<'file' | 'directory' | 'none'>;
35
+ /**
36
+ * Generate a Git-style patch to transform the given file into the given
37
+ * content.
38
+ */
39
+ generatePatch(filename: string, reactNativeVersion: string, newContent: Buffer): Promise<string>;
40
+ /**
41
+ * Apply a patch to the given file, returning the merged result, which may
42
+ * include conflict markers. The underlying file is not mutated.
43
+ *
44
+ * Git is unable to generate a representation with conflict markers in the
45
+ * event of binary merge conflicts. In this case a null Buffer is returned.
46
+ */
47
+ getPatchedFile(filename: string, reactNativeVersion: string, patchContent: string): Promise<{
48
+ patchedFile: Buffer | null;
49
+ hasConflicts: boolean;
50
+ }>;
51
+ private usingVersion;
52
+ private checkoutVersion;
53
+ private tryCheckoutLocal;
54
+ private fetchAndCheckout;
55
+ private static defaultGitDirectory;
56
+ private ensureFile;
57
+ }
@@ -1,209 +1,203 @@
1
- "use strict";
2
- /**
3
- * Copyright (c) Microsoft Corporation.
4
- * Licensed under the MIT License.
5
- *
6
- * @format
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- const fs = require("fs");
10
- const os = require("os");
11
- const path = require("path");
12
- const semver = require("semver");
13
- const simplegit = require("simple-git/promise");
14
- const BatchingQueue_1 = require("./BatchingQueue");
15
- const FileSystemRepository_1 = require("./FileSystemRepository");
16
- const node_fetch_1 = require("node-fetch");
17
- const PackageUtils_1 = require("./PackageUtils");
18
- const RN_COMMIT_ENDPOINT = 'https://api.github.com/repos/facebook/react-native/commits';
19
- const RN_GITHUB_URL = 'https://github.com/facebook/react-native.git';
20
- /**
21
- * Retrives React Native files using the React Native Github repo. Switching
22
- * between getting file contents of different versions may be slow.
23
- */
24
- class GitReactFileRepository {
25
- constructor(gitDirectory, gitClient) {
26
- this.batchingQueue = new BatchingQueue_1.default();
27
- this.fileRepo = new FileSystemRepository_1.default(gitDirectory);
28
- this.gitClient = gitClient;
29
- }
30
- /**
31
- * Asynchronusly initialize the scratch repository, creating a new Git repo is needed
32
- * @param gitDirectory optional repo directory
33
- */
34
- static async createAndInit(gitDirectory) {
35
- const dir = gitDirectory || (await this.defaultGitDirectory());
36
- await fs.promises.mkdir(dir, { recursive: true });
37
- const gitClient = simplegit(dir);
38
- gitClient.silent(true);
39
- if (!(await gitClient.checkIsRepo())) {
40
- await gitClient.init();
41
- await gitClient.addConfig('core.autocrlf', 'input');
42
- await gitClient.addConfig('core.filemode', 'false');
43
- await gitClient.addConfig('core.ignorecase', 'true');
44
- }
45
- return new GitReactFileRepository(dir, gitClient);
46
- }
47
- /**
48
- * Set a GitHub API token for all instances of GitReactFileRepository to use
49
- * when making requests.
50
- * @param token a GitHub PAT
51
- */
52
- static setGithubToken(token) {
53
- GitReactFileRepository.githubToken = token;
54
- }
55
- async listFiles(globs, reactNativeVersion) {
56
- return this.usingVersion(reactNativeVersion, () => this.fileRepo.listFiles(globs));
57
- }
58
- async readFile(filename, reactNativeVersion) {
59
- return this.usingVersion(reactNativeVersion, () => this.fileRepo.readFile(filename));
60
- }
61
- async stat(filename, reactNativeVersion) {
62
- return this.usingVersion(reactNativeVersion, () => this.fileRepo.stat(filename));
63
- }
64
- /**
65
- * Generate a Git-style patch to transform the given file into the given
66
- * content.
67
- */
68
- async generatePatch(filename, reactNativeVersion, newContent) {
69
- return this.usingVersion(reactNativeVersion, async () => {
70
- await this.ensureFile(filename);
71
- try {
72
- await this.fileRepo.writeFile(filename, newContent);
73
- const patch = await this.gitClient.diff([
74
- '--patch',
75
- '--ignore-space-at-eol',
76
- '--binary',
77
- '--',
78
- filename,
79
- ]);
80
- return patch;
81
- }
82
- finally {
83
- await this.gitClient.reset('hard');
84
- }
85
- });
86
- }
87
- /**
88
- * Apply a patch to the given file, returning the merged result, which may
89
- * include conflict markers. The underlying file is not mutated.
90
- *
91
- * Git is unable to generate a representation with conflict markers in the
92
- * event of binary merge conflicts. In this case a null Buffer is returned.
93
- */
94
- async getPatchedFile(filename, reactNativeVersion, patchContent) {
95
- return this.usingVersion(reactNativeVersion, async () => {
96
- await this.ensureFile(filename);
97
- try {
98
- await this.fileRepo.writeFile('rnwgit.patch', patchContent);
99
- let hasConflicts = false;
100
- let binaryConflicts = false;
101
- try {
102
- await this.gitClient.raw([
103
- 'apply',
104
- '--3way',
105
- '--whitespace=nowarn',
106
- 'rnwgit.patch',
107
- ]);
108
- }
109
- catch (ex) {
110
- // Hack alert: simple-git doesn't populate exception information from
111
- // conflicts when we're using raw commands (which we need to since it
112
- // doesn't support apply). Try to detect if Git gave us a bad exit code
113
- // because of merge conflicts, which we explicitly want to allow.
114
- if (!ex.message.includes('with conflicts')) {
115
- throw ex;
116
- }
117
- hasConflicts = true;
118
- binaryConflicts = ex.message.includes('Cannot merge binary files');
119
- }
120
- const patchedFile = binaryConflicts
121
- ? null
122
- : await this.fileRepo.readFile(filename);
123
- return { patchedFile, hasConflicts };
124
- }
125
- finally {
126
- await this.gitClient.reset('hard');
127
- }
128
- });
129
- }
130
- async usingVersion(reactNativeVersion, fn) {
131
- return await this.batchingQueue.enqueue(reactNativeVersion, async () => {
132
- await this.checkoutVersion(reactNativeVersion);
133
- return await fn();
134
- });
135
- }
136
- async checkoutVersion(reactNativeVersion) {
137
- if (reactNativeVersion !== this.checkedOutVersion) {
138
- if (!(await this.tryCheckoutLocal(reactNativeVersion))) {
139
- await this.fetchAndCheckout(reactNativeVersion);
140
- }
141
- this.checkedOutVersion = reactNativeVersion;
142
- }
143
- }
144
- async tryCheckoutLocal(reactNativeVersion) {
145
- try {
146
- await this.gitClient.checkout([reactNativeVersion, '--force']);
147
- return true;
148
- }
149
- catch (_a) {
150
- return false;
151
- }
152
- }
153
- async fetchAndCheckout(reactNativeVersion) {
154
- const gitRef = await this.refFromVersion(reactNativeVersion);
155
- try {
156
- await this.gitClient.fetch([
157
- RN_GITHUB_URL,
158
- `${gitRef}:${reactNativeVersion}`,
159
- '--depth=1',
160
- ]);
161
- }
162
- catch (ex) {
163
- throw new Error(`Failed to fetch '${gitRef}'. Does it exist? (${ex.message})`);
164
- }
165
- await this.gitClient.checkout([reactNativeVersion, '--force']);
166
- }
167
- async refFromVersion(reactNativeVersion) {
168
- if (!semver.valid(reactNativeVersion)) {
169
- throw new Error(`${reactNativeVersion} is not a valid semver version`);
170
- }
171
- // Stable releases of React Native use a tag where nightly releases embed
172
- // a commit hash into the prerelease tag of 0.0.0 versions
173
- if (semver.lt(reactNativeVersion, '0.0.0', { includePrerelease: true })) {
174
- // We cannot do a shallow fetch of an abbreviated commit hash
175
- const shortHash = semver.prerelease(reactNativeVersion)[0];
176
- return this.longCommitHash(shortHash);
177
- }
178
- else {
179
- return `refs/tags/v${reactNativeVersion}`;
180
- }
181
- }
182
- async longCommitHash(shortHash) {
183
- const githubToken = GitReactFileRepository.githubToken ||
184
- process.env.PLATFORM_OVERRIDE_GITHUB_TOKEN;
185
- // We cannot get abbreviated hash directly from a remote, so query Github's
186
- // API for it.
187
- const commitInfo = await node_fetch_1.default(`${RN_COMMIT_ENDPOINT}/${shortHash}`, {
188
- headers: Object.assign({ 'Content-Type': 'application/json', 'User-Agent': 'react-native-platform-override' }, (githubToken && { Authorization: `Token ${githubToken}` })),
189
- });
190
- if (!commitInfo.ok) {
191
- throw new Error(`Unable to query Github for commit '${shortHash}' Status: '${commitInfo.statusText}'`);
192
- }
193
- return (await commitInfo.json()).sha;
194
- }
195
- static async defaultGitDirectory() {
196
- return path.join(os.tmpdir(), (await PackageUtils_1.getNpmPackage()).name, 'git');
197
- }
198
- async ensureFile(filename) {
199
- const stat = await this.fileRepo.stat(filename);
200
- if (stat === 'none') {
201
- throw new Error(`Cannot find file "${filename}" in react-native@${this.checkedOutVersion}`);
202
- }
203
- else if (stat === 'directory') {
204
- throw new Error(`"${filename}" refers to a directory`);
205
- }
206
- }
207
- }
208
- exports.default = GitReactFileRepository;
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Microsoft Corporation.
4
+ * Licensed under the MIT License.
5
+ *
6
+ * @format
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ var __importDefault = (this && this.__importDefault) || function (mod) {
32
+ return (mod && mod.__esModule) ? mod : { "default": mod };
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ const fs_1 = __importDefault(require("@react-native-windows/fs"));
36
+ const os_1 = __importDefault(require("os"));
37
+ const path_1 = __importDefault(require("path"));
38
+ const simple_git_1 = __importStar(require("simple-git"));
39
+ const BatchingQueue_1 = __importDefault(require("./BatchingQueue"));
40
+ const FileSystemRepository_1 = __importDefault(require("./FileSystemRepository"));
41
+ const PackageUtils_1 = require("./PackageUtils");
42
+ const refFromVersion_1 = require("./refFromVersion");
43
+ const RN_GITHUB_URL = 'https://github.com/facebook/react-native.git';
44
+ /**
45
+ * Retrieves React Native files using the React Native Github repo. Switching
46
+ * between getting file contents of different versions may be slow.
47
+ */
48
+ class GitReactFileRepository {
49
+ constructor(gitDirectory, gitClient) {
50
+ this.batchingQueue = new BatchingQueue_1.default();
51
+ this.fileRepo = new FileSystemRepository_1.default(gitDirectory);
52
+ this.gitClient = gitClient;
53
+ }
54
+ /**
55
+ * Asynchronously initialize the scratch repository, creating a new Git repo is needed
56
+ * @param gitDirectory optional repo directory
57
+ */
58
+ static async createAndInit(gitDirectory) {
59
+ const dir = gitDirectory || (await this.defaultGitDirectory());
60
+ await fs_1.default.mkdir(dir, { recursive: true });
61
+ const gitClient = (0, simple_git_1.default)(dir);
62
+ if (!(await gitClient.checkIsRepo())) {
63
+ await gitClient.init();
64
+ await gitClient.addConfig('core.autocrlf', 'input');
65
+ await gitClient.addConfig('core.filemode', 'false');
66
+ await gitClient.addConfig('core.ignorecase', 'true');
67
+ }
68
+ return new GitReactFileRepository(dir, gitClient);
69
+ }
70
+ /**
71
+ * Set a GitHub API token for all instances of GitReactFileRepository to use
72
+ * when making requests.
73
+ * @param token a GitHub PAT
74
+ */
75
+ static setGithubToken(token) {
76
+ GitReactFileRepository.githubToken = token;
77
+ }
78
+ async listFiles(globs, reactNativeVersion) {
79
+ return this.usingVersion(reactNativeVersion, () => this.fileRepo.listFiles(globs));
80
+ }
81
+ async readFile(filename, reactNativeVersion) {
82
+ return this.usingVersion(reactNativeVersion, () => this.fileRepo.readFile(filename));
83
+ }
84
+ async stat(filename, reactNativeVersion) {
85
+ return this.usingVersion(reactNativeVersion, () => this.fileRepo.stat(filename));
86
+ }
87
+ /**
88
+ * Generate a Git-style patch to transform the given file into the given
89
+ * content.
90
+ */
91
+ async generatePatch(filename, reactNativeVersion, newContent) {
92
+ return this.usingVersion(reactNativeVersion, async () => {
93
+ await this.ensureFile(filename);
94
+ try {
95
+ await this.fileRepo.writeFile(filename, newContent);
96
+ const patch = await this.gitClient.diff([
97
+ '--patch',
98
+ '--ignore-space-at-eol',
99
+ '--binary',
100
+ '--',
101
+ filename,
102
+ ]);
103
+ return patch;
104
+ }
105
+ finally {
106
+ await this.gitClient.reset(simple_git_1.ResetMode.HARD);
107
+ }
108
+ });
109
+ }
110
+ /**
111
+ * Apply a patch to the given file, returning the merged result, which may
112
+ * include conflict markers. The underlying file is not mutated.
113
+ *
114
+ * Git is unable to generate a representation with conflict markers in the
115
+ * event of binary merge conflicts. In this case a null Buffer is returned.
116
+ */
117
+ async getPatchedFile(filename, reactNativeVersion, patchContent) {
118
+ return this.usingVersion(reactNativeVersion, async () => {
119
+ await this.ensureFile(filename);
120
+ try {
121
+ await this.fileRepo.writeFile('rnwgit.patch', patchContent);
122
+ let hasConflicts = false;
123
+ let binaryConflicts = false;
124
+ try {
125
+ await this.gitClient.raw([
126
+ 'apply',
127
+ '--3way',
128
+ '--whitespace=nowarn',
129
+ 'rnwgit.patch',
130
+ ]);
131
+ }
132
+ catch (ex) {
133
+ // Hack alert: simple-git doesn't populate exception information from
134
+ // conflicts when we're using raw commands (which we need to since it
135
+ // doesn't support apply). Try to detect if Git gave us a bad exit code
136
+ // because of merge conflicts, which we explicitly want to allow.
137
+ if (!ex.message.includes('with conflicts')) {
138
+ throw ex;
139
+ }
140
+ hasConflicts = true;
141
+ binaryConflicts = ex.message.includes('Cannot merge binary files');
142
+ }
143
+ const patchedFile = binaryConflicts
144
+ ? null
145
+ : await this.fileRepo.readFile(filename);
146
+ return { patchedFile, hasConflicts };
147
+ }
148
+ finally {
149
+ await this.gitClient.reset(simple_git_1.ResetMode.HARD);
150
+ }
151
+ });
152
+ }
153
+ async usingVersion(reactNativeVersion, fn) {
154
+ return await this.batchingQueue.enqueue(reactNativeVersion, async () => {
155
+ await this.checkoutVersion(reactNativeVersion);
156
+ return await fn();
157
+ });
158
+ }
159
+ async checkoutVersion(reactNativeVersion) {
160
+ if (reactNativeVersion !== this.checkedOutVersion) {
161
+ if (!(await this.tryCheckoutLocal(reactNativeVersion))) {
162
+ await this.fetchAndCheckout(reactNativeVersion);
163
+ }
164
+ this.checkedOutVersion = reactNativeVersion;
165
+ }
166
+ }
167
+ async tryCheckoutLocal(reactNativeVersion) {
168
+ try {
169
+ await this.gitClient.checkout([reactNativeVersion, '--force']);
170
+ return true;
171
+ }
172
+ catch (_a) {
173
+ return false;
174
+ }
175
+ }
176
+ async fetchAndCheckout(reactNativeVersion) {
177
+ const githubToken = GitReactFileRepository.githubToken ||
178
+ process.env.PLATFORM_OVERRIDE_GITHUB_TOKEN;
179
+ const gitRef = await (0, refFromVersion_1.fetchFullRef)(reactNativeVersion, { githubToken });
180
+ try {
181
+ await this.gitClient.fetch([RN_GITHUB_URL, gitRef, '--depth=1']);
182
+ await this.gitClient.checkout(['-b', reactNativeVersion, 'FETCH_HEAD']);
183
+ }
184
+ catch (ex) {
185
+ throw new Error(`Failed to fetch '${gitRef}'. Does it exist? (${ex.message})`);
186
+ }
187
+ await this.gitClient.checkout([reactNativeVersion, '--force']);
188
+ }
189
+ static async defaultGitDirectory() {
190
+ return path_1.default.join(os_1.default.tmpdir(), (await (0, PackageUtils_1.getNpmPackage)()).name, 'git');
191
+ }
192
+ async ensureFile(filename) {
193
+ const stat = await this.fileRepo.stat(filename);
194
+ if (stat === 'none') {
195
+ throw new Error(`Cannot find file "${filename}" in react-native@${this.checkedOutVersion}`);
196
+ }
197
+ else if (stat === 'directory') {
198
+ throw new Error(`"${filename}" refers to a directory`);
199
+ }
200
+ }
201
+ }
202
+ exports.default = GitReactFileRepository;
209
203
  //# sourceMappingURL=GitReactFileRepository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GitReactFileRepository.js","sourceRoot":"","sources":["../src/GitReactFileRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GitReactFileRepository.js","sourceRoot":"","sources":["../src/GitReactFileRepository.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Microsoft Corporation.\n * Licensed under the MIT License.\n *\n * @format\n */\n\nimport fs from '@react-native-windows/fs';\nimport os from 'os';\nimport path from 'path';\nimport simplegit, {SimpleGit, ResetMode} from 'simple-git';\n\nimport BatchingQueue from './BatchingQueue';\nimport FileSystemRepository from './FileSystemRepository';\nimport {VersionedReactFileRepository} from './FileRepository';\nimport {getNpmPackage} from './PackageUtils';\nimport {fetchFullRef} from './refFromVersion';\n\nconst RN_GITHUB_URL = 'https://github.com/facebook/react-native.git';\n\n/**\n * Retrieves React Native files using the React Native Github repo. Switching\n * between getting file contents of different versions may be slow.\n */\nexport default class GitReactFileRepository\n implements VersionedReactFileRepository\n{\n private readonly fileRepo: FileSystemRepository;\n private readonly gitClient: SimpleGit;\n private checkedOutVersion?: string;\n private static githubToken?: string;\n\n // We need to ensure it is impossible to check out a new React Native\n // version while an operation hasn't yet finished. We queue each operation to\n // ensure they are performed atomically.\n private readonly batchingQueue: BatchingQueue<string>;\n\n private constructor(gitDirectory: string, gitClient: SimpleGit) {\n this.batchingQueue = new BatchingQueue();\n this.fileRepo = new FileSystemRepository(gitDirectory);\n this.gitClient = gitClient;\n }\n\n /**\n * Asynchronously initialize the scratch repository, creating a new Git repo is needed\n * @param gitDirectory optional repo directory\n */\n static async createAndInit(\n gitDirectory?: string,\n ): Promise<GitReactFileRepository> {\n const dir = gitDirectory || (await this.defaultGitDirectory());\n await fs.mkdir(dir, {recursive: true});\n\n const gitClient = simplegit(dir);\n\n if (!(await gitClient.checkIsRepo())) {\n await gitClient.init();\n await gitClient.addConfig('core.autocrlf', 'input');\n await gitClient.addConfig('core.filemode', 'false');\n await gitClient.addConfig('core.ignorecase', 'true');\n }\n\n return new GitReactFileRepository(dir, gitClient);\n }\n\n /**\n * Set a GitHub API token for all instances of GitReactFileRepository to use\n * when making requests.\n * @param token a GitHub PAT\n */\n static setGithubToken(token: string) {\n GitReactFileRepository.githubToken = token;\n }\n\n async listFiles(\n globs: string[] | undefined,\n reactNativeVersion: string,\n ): Promise<string[]> {\n return this.usingVersion(reactNativeVersion, () =>\n this.fileRepo.listFiles(globs),\n );\n }\n\n async readFile(\n filename: string,\n reactNativeVersion: string,\n ): Promise<Buffer | null> {\n return this.usingVersion(reactNativeVersion, () =>\n this.fileRepo.readFile(filename),\n );\n }\n\n async stat(\n filename: string,\n reactNativeVersion: string,\n ): Promise<'file' | 'directory' | 'none'> {\n return this.usingVersion(reactNativeVersion, () =>\n this.fileRepo.stat(filename),\n );\n }\n\n /**\n * Generate a Git-style patch to transform the given file into the given\n * content.\n */\n async generatePatch(\n filename: string,\n reactNativeVersion: string,\n newContent: Buffer,\n ): Promise<string> {\n return this.usingVersion(reactNativeVersion, async () => {\n await this.ensureFile(filename);\n\n try {\n await this.fileRepo.writeFile(filename, newContent);\n const patch = await this.gitClient.diff([\n '--patch',\n '--ignore-space-at-eol',\n '--binary',\n '--',\n filename,\n ]);\n\n return patch;\n } finally {\n await this.gitClient.reset(ResetMode.HARD);\n }\n });\n }\n\n /**\n * Apply a patch to the given file, returning the merged result, which may\n * include conflict markers. The underlying file is not mutated.\n *\n * Git is unable to generate a representation with conflict markers in the\n * event of binary merge conflicts. In this case a null Buffer is returned.\n */\n async getPatchedFile(\n filename: string,\n reactNativeVersion: string,\n patchContent: string,\n ): Promise<{patchedFile: Buffer | null; hasConflicts: boolean}> {\n return this.usingVersion(reactNativeVersion, async () => {\n await this.ensureFile(filename);\n\n try {\n await this.fileRepo.writeFile('rnwgit.patch', patchContent);\n\n let hasConflicts = false;\n let binaryConflicts = false;\n\n try {\n await this.gitClient.raw([\n 'apply',\n '--3way',\n '--whitespace=nowarn',\n 'rnwgit.patch',\n ]);\n } catch (ex) {\n // Hack alert: simple-git doesn't populate exception information from\n // conflicts when we're using raw commands (which we need to since it\n // doesn't support apply). Try to detect if Git gave us a bad exit code\n // because of merge conflicts, which we explicitly want to allow.\n if (!(ex as Error).message.includes('with conflicts')) {\n throw ex;\n }\n\n hasConflicts = true;\n binaryConflicts = (ex as Error).message.includes(\n 'Cannot merge binary files',\n );\n }\n\n const patchedFile = binaryConflicts\n ? null\n : await this.fileRepo.readFile(filename);\n\n return {patchedFile, hasConflicts};\n } finally {\n await this.gitClient.reset(ResetMode.HARD);\n }\n });\n }\n\n private async usingVersion<T>(\n reactNativeVersion: string,\n fn: () => Promise<T>,\n ): Promise<T> {\n return await this.batchingQueue.enqueue(reactNativeVersion, async () => {\n await this.checkoutVersion(reactNativeVersion);\n return await fn();\n });\n }\n\n private async checkoutVersion(reactNativeVersion: string) {\n if (reactNativeVersion !== this.checkedOutVersion) {\n if (!(await this.tryCheckoutLocal(reactNativeVersion))) {\n await this.fetchAndCheckout(reactNativeVersion);\n }\n\n this.checkedOutVersion = reactNativeVersion;\n }\n }\n\n private async tryCheckoutLocal(reactNativeVersion: string): Promise<boolean> {\n try {\n await this.gitClient.checkout([reactNativeVersion, '--force']);\n return true;\n } catch {\n return false;\n }\n }\n\n private async fetchAndCheckout(reactNativeVersion: string) {\n const githubToken =\n GitReactFileRepository.githubToken ||\n process.env.PLATFORM_OVERRIDE_GITHUB_TOKEN;\n const gitRef = await fetchFullRef(reactNativeVersion, {githubToken});\n\n try {\n await this.gitClient.fetch([RN_GITHUB_URL, gitRef, '--depth=1']);\n await this.gitClient.checkout(['-b', reactNativeVersion, 'FETCH_HEAD']);\n } catch (ex) {\n throw new Error(\n `Failed to fetch '${gitRef}'. Does it exist? (${\n (ex as Error).message\n })`,\n );\n }\n\n await this.gitClient.checkout([reactNativeVersion, '--force']);\n }\n\n private static async defaultGitDirectory(): Promise<string> {\n return path.join(os.tmpdir(), (await getNpmPackage()).name, 'git');\n }\n\n private async ensureFile(filename: string): Promise<void> {\n const stat = await this.fileRepo.stat(filename);\n if (stat === 'none') {\n throw new Error(\n `Cannot find file \"${filename}\" in react-native@${this.checkedOutVersion}`,\n );\n } else if (stat === 'directory') {\n throw new Error(`\"${filename}\" refers to a directory`);\n }\n }\n}\n"]}