github-repository-provider 7.30.20 → 7.30.21

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-repository-provider",
3
- "version": "7.30.20",
3
+ "version": "7.30.21",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -11,7 +11,6 @@ import {
11
11
  */
12
12
  export class GithubBranch extends Branch {
13
13
  #entries = new Map();
14
- #commits = new Map();
15
14
 
16
15
  /**
17
16
  * Writes content into the branch
@@ -44,10 +43,6 @@ export class GithubBranch extends Branch {
44
43
  * @param {Object} options
45
44
  */
46
45
  async commit(message, entries, options) {
47
- const updates = await Promise.all(
48
- entries.map(entry => this.writeEntry(entry))
49
- );
50
-
51
46
  /*
52
47
  * 1st. commit on empty tree
53
48
  * https://stackoverflow.com/questions/9765453/is-gits-semi-secret-empty-tree-object-reliable-and-why-is-there-not-a-symbolic/9766506#9766506
@@ -56,42 +51,20 @@ export class GithubBranch extends Branch {
56
51
  * sha256:6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321
57
52
  */
58
53
 
59
- const shaLatestCommit = await this.refId();
60
- const commit = await this.commitForSha(shaLatestCommit);
61
- const tree = await this.owner.addTree(updates, commit.tree.sha);
62
-
63
- let r = await this.provider.fetchJSON(`${this.api}/git/commits`, {
64
- method: "POST",
65
- body: JSON.stringify({
66
- message,
67
- tree: tree.sha,
68
- parents: [shaLatestCommit]
69
- })
70
- });
71
-
72
- this.#commits.set(r.json.sha, r.json);
73
-
74
- return this.owner.setRefId(this.ref, r.json.sha, options);
75
- }
76
-
77
- /**
78
- * {@link https://developer.github.com/v3/git/commits/#get-a-commit}
79
- * @param {string} sha
80
- * @return {Object} response
81
- */
82
- async commitForSha(sha) {
83
- const commit = this.#commits.get(sha);
84
- if (commit) {
85
- return commit;
86
- }
87
-
88
- const { json } = await this.provider.fetchJSON(
89
- `${this.api}/git/commits/${sha}`
54
+ const updates = await Promise.all(
55
+ entries.map(entry => this.writeEntry(entry))
90
56
  );
91
57
 
92
- this.#commits.set(sha, json);
58
+ const shaLatestCommit = await this.refId();
59
+ const latestCommit = await this.owner.commitForSha(shaLatestCommit);
60
+ const tree = await this.owner.addTree(updates, latestCommit.tree.sha);
61
+ const commit = await this.owner.addCommit(
62
+ tree.sha,
63
+ [shaLatestCommit],
64
+ message
65
+ );
93
66
 
94
- return json;
67
+ return this.owner.setRefId(this.ref, commit.sha, options);
95
68
  }
96
69
 
97
70
  /**
@@ -126,7 +99,7 @@ export class GithubBranch extends Branch {
126
99
  }
127
100
 
128
101
  async *entries(patterns) {
129
- const commit = await this.commitForSha(await this.refId());
102
+ const commit = await this.owner.commitForSha(await this.refId());
130
103
 
131
104
  for (const entry of matcher(
132
105
  await this.owner.tree(commit.tree.sha),
@@ -14,6 +14,7 @@ const conflictErrorActions = {
14
14
  export class GithubRepository extends Repository {
15
15
  #refs = new Map();
16
16
  #trees = new Map();
17
+ #commits = new Map();
17
18
 
18
19
  static get attributeMapping() {
19
20
  return {
@@ -62,6 +63,8 @@ export class GithubRepository extends Repository {
62
63
  const { response, json } = await this.provider.fetchJSON(next);
63
64
 
64
65
  for (const c of json) {
66
+ this.#commits.set(c.sha, json);
67
+
65
68
  yield {
66
69
  sha: c.sha,
67
70
  message: c.message,
@@ -73,6 +76,40 @@ export class GithubRepository extends Repository {
73
76
  } while (next);
74
77
  }
75
78
 
79
+ async addCommit(tree, parents, message) {
80
+ let r = await this.provider.fetchJSON(`${this.api}/git/commits`, {
81
+ method: "POST",
82
+ body: JSON.stringify({
83
+ tree,
84
+ parents,
85
+ message
86
+ })
87
+ });
88
+
89
+ this.#commits.set(r.json.sha, r.json);
90
+ return r.json;
91
+ }
92
+
93
+ /**
94
+ * {@link https://developer.github.com/v3/git/commits/#get-a-commit}
95
+ * @param {string} sha
96
+ * @return {Object} response
97
+ */
98
+ async commitForSha(sha) {
99
+ const commit = this.#commits.get(sha);
100
+ if (commit) {
101
+ return commit;
102
+ }
103
+
104
+ const { json } = await this.provider.fetchJSON(
105
+ `${this.api}/git/commits/${sha}`
106
+ );
107
+
108
+ this.#commits.set(sha, json);
109
+
110
+ return json;
111
+ }
112
+
76
113
  /**
77
114
  * @see https://developer.github.com/v3/git/trees/
78
115
  * @param {string} sha