@tasenor/common-plugins 1.10.35 → 1.10.36
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/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-ci.log +3 -3
- package/dist/Finnish/ui/index.d.ts +1 -0
- package/dist/Finnish/ui/index.js +4 -1
- package/dist/Finnish/ui/index.js.map +1 -1
- package/dist/GitBackup/backend/index.d.ts +4 -0
- package/dist/GitBackup/backend/index.js +26 -8
- package/dist/GitBackup/backend/index.js.map +1 -1
- package/dist/GitBackup/ui/index.js +52 -13
- package/dist/GitBackup/ui/index.js.map +1 -1
- package/package.json +5 -5
- package/src/Finnish/ui/index.tsx +5 -1
- package/src/GitBackup/backend/index.ts +27 -8
- package/src/GitBackup/ui/index.tsx +65 -20
package/.turbo/turbo-build.log
CHANGED
package/.turbo/turbo-ci.log
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
|
|
2
|
-
> @tasenor/common-plugins@1.10.
|
|
2
|
+
> @tasenor/common-plugins@1.10.35 ci /home/ci/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
|
|
3
3
|
> pnpm run lint
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @tasenor/common-plugins@1.10.
|
|
6
|
+
> @tasenor/common-plugins@1.10.35 lint /home/ci/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins
|
|
7
7
|
> eslint 'src/**/*.{ts,tsx}' 'data/**/*.mjs'
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
/home/ci/tasenor-qa/tasenor-bookkeeper/packages/tasenor-common-plugins/src/GitBackup/ui/index.tsx
|
|
11
|
-
|
|
11
|
+
7:10 warning 't' is defined but never used @typescript-eslint/no-unused-vars
|
|
12
12
|
|
|
13
13
|
✖ 1 problem (0 errors, 1 warning)
|
|
14
14
|
|
package/dist/Finnish/ui/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { LanguagePlugin } from '@tasenor/common-ui';
|
|
|
5
5
|
class Finnish extends LanguagePlugin {
|
|
6
6
|
static code = 'Finnish';
|
|
7
7
|
static title = 'Finnish';
|
|
8
|
-
static version = '1.0.
|
|
8
|
+
static version = '1.0.66';
|
|
9
9
|
static icon = '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12.36 6H7v6h7.24l.4 2H18V8h-5.24z" opacity=".3"/><path d="M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6h-5.6zm3.6 8h-3.36l-.4-2H7V6h5.36l.4 2H18v6z"/></svg>';
|
|
10
10
|
static releaseDate = '2023-06-10';
|
|
11
11
|
static use = 'ui';
|
|
@@ -26,6 +26,9 @@ class Finnish extends LanguagePlugin {
|
|
|
26
26
|
date2str(date) {
|
|
27
27
|
return dayjs(date).format('DD.MM.YYYY');
|
|
28
28
|
}
|
|
29
|
+
time2str(date) {
|
|
30
|
+
return dayjs(date).format('HH.mm.ss');
|
|
31
|
+
}
|
|
29
32
|
str2date(str, sample = null) {
|
|
30
33
|
sample = sample ? new Date(sample) : new Date();
|
|
31
34
|
let year, month, day;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Finnish/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,MAAM,OAAQ,SAAQ,cAAc;IAElC,MAAM,CAAC,IAAI,GAAG,SAAS,CAAA;IACvB,MAAM,CAAC,KAAK,GAAG,SAAS,CAAA;IACxB,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAA;IACzB,MAAM,CAAC,IAAI,GAAG,2SAA2S,CAAA;IACzT,MAAM,CAAC,WAAW,GAAG,YAAY,CAAA;IACjC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAA;IACjB,MAAM,CAAC,IAAI,GAAG,UAAU,CAAA;IACxB,MAAM,CAAC,WAAW,GAAG,yCAAyC,CAAA;IAE9D;QACE,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,SAAS,GAAG;YACf,EAAE,EAAE,EAAE;SACP,CAAA;IACH,CAAC;IAED,YAAY;QACV,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACxB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,QAAQ,CAAC,IAAI;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACzC,CAAC;IAED,QAAQ,CAAC,GAAG,EAAE,SAAsB,IAAI;QACtC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;QAC/C,IAAI,IAAI,EAAE,KAAK,EAAE,GAAG,CAAA;QACpB,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAClD,OAAO,SAAS,CAAA;SACjB;QACD,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACnC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;QACnB,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA;QAClD,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAA;QAC7C,IAAI,IAAI,GAAG,GAAG,EAAE;YACd,IAAI,IAAI,IAAI,CAAA;SACb;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;QAC/D,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC/D,CAAC;;AAGH,eAAe,OAAO,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Finnish/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,MAAM,OAAQ,SAAQ,cAAc;IAElC,MAAM,CAAC,IAAI,GAAG,SAAS,CAAA;IACvB,MAAM,CAAC,KAAK,GAAG,SAAS,CAAA;IACxB,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAA;IACzB,MAAM,CAAC,IAAI,GAAG,2SAA2S,CAAA;IACzT,MAAM,CAAC,WAAW,GAAG,YAAY,CAAA;IACjC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAA;IACjB,MAAM,CAAC,IAAI,GAAG,UAAU,CAAA;IACxB,MAAM,CAAC,WAAW,GAAG,yCAAyC,CAAA;IAE9D;QACE,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,SAAS,GAAG;YACf,EAAE,EAAE,EAAE;SACP,CAAA;IACH,CAAC;IAED,YAAY;QACV,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACxB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,QAAQ,CAAC,IAAI;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACzC,CAAC;IAED,QAAQ,CAAC,IAAI;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACvC,CAAC;IAED,QAAQ,CAAC,GAAG,EAAE,SAAsB,IAAI;QACtC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;QAC/C,IAAI,IAAI,EAAE,KAAK,EAAE,GAAG,CAAA;QACpB,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAClD,OAAO,SAAS,CAAA;SACjB;QACD,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACnC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;QACnB,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA;QAClD,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAA;QAC7C,IAAI,IAAI,GAAG,GAAG,EAAE;YACd,IAAI,IAAI,IAAI,CAAA;SACb;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;QAC/D,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC/D,CAAC;;AAGH,eAAe,OAAO,CAAA"}
|
|
@@ -18,6 +18,10 @@ declare class GitBackup extends ToolPlugin {
|
|
|
18
18
|
* List of the latest backup commits.
|
|
19
19
|
*/
|
|
20
20
|
GET(db: KnexDatabase, data: any): Promise<unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* Restore from the backup.
|
|
23
|
+
*/
|
|
24
|
+
PUT(db: KnexDatabase, data: any): Promise<unknown>;
|
|
21
25
|
/**
|
|
22
26
|
* A helper to check settings and set up repository for further use.
|
|
23
27
|
*/
|
|
@@ -2,6 +2,7 @@ import { GitRepo, systemPiped, TasenorExporter, ToolPlugin } from '@tasenor/comm
|
|
|
2
2
|
import { error, log, note, validGitRepoName } from '@tasenor/common';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
|
+
const ALLOW_BAD_REPOSITORY = true;
|
|
5
6
|
class GitBackup extends ToolPlugin {
|
|
6
7
|
constructor() {
|
|
7
8
|
super();
|
|
@@ -49,6 +50,16 @@ class GitBackup extends ToolPlugin {
|
|
|
49
50
|
}
|
|
50
51
|
return { success: false };
|
|
51
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Restore from the backup.
|
|
55
|
+
*/
|
|
56
|
+
async PUT(db, data) {
|
|
57
|
+
if (typeof data === 'object' && data !== null && !!data.commit) {
|
|
58
|
+
console.log('TODO: hash', data.commit);
|
|
59
|
+
return { success: true };
|
|
60
|
+
}
|
|
61
|
+
return { success: false };
|
|
62
|
+
}
|
|
52
63
|
/**
|
|
53
64
|
* A helper to check settings and set up repository for further use.
|
|
54
65
|
*/
|
|
@@ -63,7 +74,7 @@ class GitBackup extends ToolPlugin {
|
|
|
63
74
|
return null;
|
|
64
75
|
}
|
|
65
76
|
// Check repo URL.
|
|
66
|
-
if (!validGitRepoName(repository)) {
|
|
77
|
+
if (!ALLOW_BAD_REPOSITORY && !validGitRepoName(repository)) {
|
|
67
78
|
error(`Bad repository address ${JSON.stringify(repository)}.`);
|
|
68
79
|
return null;
|
|
69
80
|
}
|
|
@@ -101,6 +112,7 @@ class GitBackup extends ToolPlugin {
|
|
|
101
112
|
* Get a list of commits.
|
|
102
113
|
*/
|
|
103
114
|
async collectCommits(db, limit) {
|
|
115
|
+
// TODO: Would it work if we define types in ../common instead of unknown[]?
|
|
104
116
|
const setup = await this.setupRepository(db);
|
|
105
117
|
if (!setup) {
|
|
106
118
|
return [];
|
|
@@ -108,13 +120,19 @@ class GitBackup extends ToolPlugin {
|
|
|
108
120
|
const { repo } = setup;
|
|
109
121
|
log(`Fetching commit list for DB '${db.client.config.connection.database}'.`);
|
|
110
122
|
await repo.update();
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
123
|
+
try {
|
|
124
|
+
const gitLog = await repo.git.log({ maxCount: limit });
|
|
125
|
+
return gitLog.all.map(e => ({
|
|
126
|
+
hash: e.hash,
|
|
127
|
+
date: e.date,
|
|
128
|
+
message: e.message,
|
|
129
|
+
author: `${e.author_name} ${e.author_email ? '<' + e.author_email + '>' : ''}`.trim()
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
error(`Failed to get log from git repository for DB '${db.client.config.connection.database}'.`);
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
118
136
|
}
|
|
119
137
|
/**
|
|
120
138
|
* Execute backup making for a database.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/GitBackup/backend/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/GitBackup/backend/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtG,OAAO,EAAwB,KAAK,EAAY,GAAG,EAAE,IAAI,EAAmB,gBAAgB,EAAW,MAAM,iBAAiB,CAAA;AAC9H,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,MAAM,oBAAoB,GAAG,IAAI,CAAA;AAEjC,MAAM,SAAU,SAAQ,UAAU;IAChC;QACE,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,IAAI,GAAG,WAAwB,CAAA;QACpC,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAA;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAkB,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,oTAAoT,CAAA;QAChU,IAAI,CAAC,WAAW,GAAG,YAAY,CAAA;QAC/B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAA;QACjB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAA;QAClB,IAAI,CAAC,WAAW,GAAG,qDAAqD,CAAA;QAExE,IAAI,CAAC,SAAS,GAAG,EAChB,CAAA;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,EAAgB,EAAE,GAAG,KAAe;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAA;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAA;QAE/C,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAA;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAgB;QAC5B,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,+BAA+B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACvF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,EAAgB,EAAE,IAAI;QAC/B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAChE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;YAC/D,OAAO,EAAE,OAAO,EAAE,CAAA;SACnB;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,EAAgB,EAAE,IAAI;QAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YACxE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;YAC/D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAA;SAC5C;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,EAAgB,EAAE,IAAI;QAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;YAC9D,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;SACzB;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC3B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,EAAgB;QAS5C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;QACrC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,CAAA;QAC1D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;QAC9D,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,eAAe,CAAC,CAAA;QAEhE,kCAAkC;QAClC,IAAI,UAAU,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,EAAE;YAC1D,KAAK,CAAC,oEAAoE,CAAC,CAAA;YAC3E,OAAO,IAAI,CAAA;SACZ;QAED,kBAAkB;QAClB,IAAI,CAAC,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;YAC1D,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAC9D,OAAO,IAAI,CAAA;SACZ;QAED,wBAAwB;QACxB,MAAM,OAAO,GAAa,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAa,CAAA;QACnE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAC7B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAE5B,IAAI,aAAa,EAAE;YACjB,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;YACzC,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;SACjC;QAED,uCAAuC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;QAChD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE;YAE/D,KAAK,CAAC,oBAAoB,YAAY,qEAAqE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAA;YACpJ,OAAO,IAAI,CAAA;SACZ;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAkB,CAAA;QAE7E,iCAAiC;QACjC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACnD,IAAI,CAAC,IAAI,EAAE;YACT,KAAK,CAAC,gDAAgD,UAAU,UAAU,OAAO,GAAG,CAAC,CAAA;YACrF,OAAO,IAAI,CAAA;SACZ;QACD,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,kCAA2C;YAClD,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;SAC9C,CAAC,CAAA;QAEF,OAAO;YACL,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI;SAC3E,CAAA;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,EAAgB,EAAE,KAAa;QAClD,4EAA4E;QAC5E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,EAAE,CAAA;SACV;QACD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;QAEtB,GAAG,CAAC,gCAAgC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAA;QAC7E,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACnB,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;YACtD,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE;aACtF,CAAC,CAAC,CAAA;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,KAAK,CAAC,iDAAiD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAA;YAChG,OAAO,EAAE,CAAA;SACV;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,EAAgB,EAAE,OAAe;QAEhD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,KAAK,CAAA;SACb;QACD,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;QAE/C,GAAG,CAAC,yBAAyB,YAAY,YAAY,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAA;QAC9F,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,EAAgB,EAAE,GAAkB;QAE7C,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAA;QAEtC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACtB,GAAG,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAA;YACvC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;SACpC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAkB,CAAA;QAC3D,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC5C,uDAAuD;QACvD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAA;QAC5E,MAAM,GAAG,GAAG,gBAAgB,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAA;QAC1E,MAAM,WAAW,CAAC,cAAc,GAAG,OAAO,GAAG,YAAY,CAAC,CAAA;QAE1D,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAA;QACtC,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;IACpC,CAAC;CACF;AAED,eAAe,SAAS,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { useState, useEffect, useRef } from 'react';
|
|
2
|
-
import { Note, IconButton, SubPanel, ToolPlugin, Dialog } from '@tasenor/common-ui';
|
|
2
|
+
import { Note, IconButton, SubPanel, ToolPlugin, Dialog, Localize } from '@tasenor/common-ui';
|
|
3
3
|
import { makeObservable, observable, runInAction } from 'mobx';
|
|
4
4
|
import { Trans, useTranslation } from 'react-i18next';
|
|
5
5
|
import { Box, Table, TableBody, TableCell, TableContainer, TableRow, TextField, Typography } from '@mui/material';
|
|
@@ -17,24 +17,53 @@ function MakeBackupIcon(props) {
|
|
|
17
17
|
function BackupCommitList(props) {
|
|
18
18
|
const { store, backups } = props;
|
|
19
19
|
const [commits, setCommits] = useState([]);
|
|
20
|
+
const [fetched, setFetched] = useState(false);
|
|
21
|
+
const [restore, setRestore] = useState(null);
|
|
22
|
+
const { t } = useTranslation();
|
|
20
23
|
useEffect(() => {
|
|
21
24
|
if (!store.db) {
|
|
22
25
|
return;
|
|
23
26
|
}
|
|
24
27
|
store.request(`/db/${store.db}/tools/${GitBackup.code}`, 'GET', { type: 'commits', count: 20 }).then((res) => {
|
|
28
|
+
setFetched(true);
|
|
25
29
|
if (res.success) {
|
|
26
30
|
setCommits(res.data.commits);
|
|
27
31
|
}
|
|
28
32
|
});
|
|
29
33
|
}, [store.db, backups]);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
const onRestore = (commit) => {
|
|
35
|
+
store.request(`/db/${store.db}/tools/${GitBackup.code}`, 'PUT', { commit: commit.hash }).then((res) => {
|
|
36
|
+
if (res && res.success) {
|
|
37
|
+
store.addMessage(t('Backup restored successfully.'));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
store.addError(t('Restoring backup failed.'));
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
if (fetched && commits.length === 0) {
|
|
45
|
+
return React.createElement(Box, null,
|
|
46
|
+
React.createElement(Trans, null, "Not able to find any commits from the repository."));
|
|
47
|
+
}
|
|
48
|
+
return React.createElement(Box, null,
|
|
49
|
+
React.createElement(TableContainer, null,
|
|
50
|
+
React.createElement(Table, null,
|
|
51
|
+
React.createElement(TableBody, null, commits.map((commit, idx) => React.createElement(TableRow, { key: idx },
|
|
52
|
+
React.createElement(TableCell, null,
|
|
53
|
+
React.createElement(IconButton, { id: "Restore", icon: "update", title: "restore", onClick: () => setRestore(commit) })),
|
|
54
|
+
React.createElement(TableCell, null,
|
|
55
|
+
React.createElement(Typography, { color: "secondary" }, commit.hash),
|
|
56
|
+
React.createElement(Typography, { variant: "body1" }, commit.message),
|
|
57
|
+
React.createElement(Typography, { variant: "caption" }, commit.author)),
|
|
58
|
+
React.createElement(TableCell, null,
|
|
59
|
+
React.createElement(Localize, { date: commit.date, withTime: true }))))))),
|
|
60
|
+
React.createElement(Dialog, { isVisible: !!restore, title: t('Restore this backup?'), wider: true, onClose: () => setRestore(null), onConfirm: () => onRestore(restore) }, restore && React.createElement(Box, null,
|
|
61
|
+
React.createElement(Typography, { variant: "caption" },
|
|
62
|
+
React.createElement(Localize, { date: restore.date, withTime: true }),
|
|
63
|
+
" ",
|
|
64
|
+
restore.hash),
|
|
65
|
+
React.createElement(Typography, { variant: "body1" }, restore.message),
|
|
66
|
+
React.createElement(Typography, { variant: "caption" }, restore.author))));
|
|
38
67
|
}
|
|
39
68
|
class GitBackup extends ToolPlugin {
|
|
40
69
|
busy = false;
|
|
@@ -61,17 +90,25 @@ class GitBackup extends ToolPlugin {
|
|
|
61
90
|
'label-repository': 'Repository URL',
|
|
62
91
|
'label-subDirectory': 'Subdirectory inside the repository',
|
|
63
92
|
'label-sshPrivateKey': 'SSH private key',
|
|
64
|
-
'icon-
|
|
93
|
+
'icon-restore': 'Restore this backup',
|
|
94
|
+
'icon-summarize-make-backup': 'Make a backup',
|
|
65
95
|
},
|
|
66
96
|
fi: {
|
|
67
97
|
'label-repository': 'Git-säilön URL',
|
|
68
98
|
'label-subDirectory': 'Alihakemiston nimi säilön sisällä',
|
|
69
99
|
'label-sshPrivateKey': 'SSH yksityinen avain',
|
|
100
|
+
'icon-restore': 'Palauta tältä varmuuskopiolta',
|
|
70
101
|
'icon-summarize-make-backup': 'Tee varmuuskopio',
|
|
71
102
|
'Backup for Git': 'Git-pohjainen Varmuuskopiointi',
|
|
72
103
|
'Manual backup by GitBackup {version}': 'Ylimääräinen varmuuskopio GitBackup {version}',
|
|
73
104
|
'Backup created successfully.': 'Varmuuskopion luominen onnistui.',
|
|
74
|
-
'Creating backup failed.': 'Varmuuskopion luominen ei onnistunut.'
|
|
105
|
+
'Creating backup failed.': 'Varmuuskopion luominen ei onnistunut.',
|
|
106
|
+
'Not able to find any commits from the repository.': 'Varmuuskopio vaikuttaisi olevan tyhjä.',
|
|
107
|
+
'This tool takes every night automatically one backup.': 'Tämä työkalu tekee yhden varmuuskopion joka yö.',
|
|
108
|
+
'You can also make immediately backup from the icon above.': 'Lisäksi voit tehdä ylimääräisen varmuuskopion halutessasi ylläolevasta ikonista.',
|
|
109
|
+
'Existing backups are listed below and can be restored from the icon next to them.': 'Aiemmat varmuuskopiot ovat alla listattuna. Niistä voi palauttaa minkä tahansa klikkaamalla niiden vieressä olevaa ikonia.',
|
|
110
|
+
'Backup restored successfully.': 'Varmuuskopion palautus onnistui.',
|
|
111
|
+
'Restoring backup failed.': 'Varmuuskopion palauttaminen epäonnistui.'
|
|
75
112
|
}
|
|
76
113
|
};
|
|
77
114
|
}
|
|
@@ -91,10 +128,10 @@ class GitBackup extends ToolPlugin {
|
|
|
91
128
|
this.backups = this.backups + 1;
|
|
92
129
|
});
|
|
93
130
|
if (success) {
|
|
94
|
-
this.store.addMessage(this.t('Backup
|
|
131
|
+
this.store.addMessage(this.t('Backup restored successfully.'));
|
|
95
132
|
}
|
|
96
133
|
else {
|
|
97
|
-
this.store.addError(this.t('
|
|
134
|
+
this.store.addError(this.t('Restoring backup failed.'));
|
|
98
135
|
}
|
|
99
136
|
});
|
|
100
137
|
}
|
|
@@ -114,6 +151,8 @@ class GitBackup extends ToolPlugin {
|
|
|
114
151
|
React.createElement(Trans, null, "This tool takes every night automatically one backup."),
|
|
115
152
|
React.createElement(React.Fragment, null, " "),
|
|
116
153
|
React.createElement(Trans, null, "You can also make immediately backup from the icon above."),
|
|
154
|
+
React.createElement(React.Fragment, null, " "),
|
|
155
|
+
React.createElement(Trans, null, "Existing backups are listed below and can be restored from the icon next to them."),
|
|
117
156
|
React.createElement(React.Fragment, null, " ")),
|
|
118
157
|
React.createElement(Box, { sx: { m: 2 } },
|
|
119
158
|
React.createElement(BackupCommitList, { backups: this.backups, store: this.store })));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/GitBackup/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/GitBackup/ui/index.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tasenor/common-plugins",
|
|
3
|
-
"version": "1.10.
|
|
3
|
+
"version": "1.10.36",
|
|
4
4
|
"description": "Shared common plugins of Tasenor project",
|
|
5
5
|
"repository": "git@github.com:dataplugoy/tasenor-bookkeeper.git",
|
|
6
6
|
"author": "Tommi Ronkainen <tommi.ronkainen@gmail.com>",
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
"dayjs": "1.10.8",
|
|
14
14
|
"sprintf-js": "^1.1.2",
|
|
15
15
|
"tsx": "^4.7.0",
|
|
16
|
-
"@tasenor/common": "1.10.
|
|
17
|
-
"@tasenor/common-
|
|
18
|
-
"@tasenor/common-
|
|
16
|
+
"@tasenor/common": "1.10.36",
|
|
17
|
+
"@tasenor/common-ui": "1.10.36",
|
|
18
|
+
"@tasenor/common-node": "1.10.36"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@mui/icons-material": "^5.14.1",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"react-i18next": "^13.0.2",
|
|
32
32
|
"react-router-dom": "^6.14.1",
|
|
33
33
|
"typescript": "^5.1.6",
|
|
34
|
-
"@tasenor/config": "1.10.
|
|
34
|
+
"@tasenor/config": "1.10.36",
|
|
35
35
|
"eslint-config-tasenor": "0.0.0"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
package/src/Finnish/ui/index.tsx
CHANGED
|
@@ -7,7 +7,7 @@ class Finnish extends LanguagePlugin {
|
|
|
7
7
|
|
|
8
8
|
static code = 'Finnish'
|
|
9
9
|
static title = 'Finnish'
|
|
10
|
-
static version = '1.0.
|
|
10
|
+
static version = '1.0.66'
|
|
11
11
|
static icon = '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12.36 6H7v6h7.24l.4 2H18V8h-5.24z" opacity=".3"/><path d="M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6h-5.6zm3.6 8h-3.36l-.4-2H7V6h5.36l.4 2H18v6z"/></svg>'
|
|
12
12
|
static releaseDate = '2023-06-10'
|
|
13
13
|
static use = 'ui'
|
|
@@ -33,6 +33,10 @@ class Finnish extends LanguagePlugin {
|
|
|
33
33
|
return dayjs(date).format('DD.MM.YYYY')
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
time2str(date) {
|
|
37
|
+
return dayjs(date).format('HH.mm.ss')
|
|
38
|
+
}
|
|
39
|
+
|
|
36
40
|
str2date(str, sample: null | Date = null) {
|
|
37
41
|
sample = sample ? new Date(sample) : new Date()
|
|
38
42
|
let year, month, day
|
|
@@ -3,6 +3,8 @@ import { DirectoryPath, Email, error, FilePath, log, note, PluginCode, Url, vali
|
|
|
3
3
|
import fs from 'fs'
|
|
4
4
|
import path from 'path'
|
|
5
5
|
|
|
6
|
+
const ALLOW_BAD_REPOSITORY = true
|
|
7
|
+
|
|
6
8
|
class GitBackup extends ToolPlugin {
|
|
7
9
|
constructor() {
|
|
8
10
|
super()
|
|
@@ -59,6 +61,17 @@ class GitBackup extends ToolPlugin {
|
|
|
59
61
|
return { success: false }
|
|
60
62
|
}
|
|
61
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Restore from the backup.
|
|
66
|
+
*/
|
|
67
|
+
async PUT(db: KnexDatabase, data): Promise<unknown> {
|
|
68
|
+
if (typeof data === 'object' && data !== null && !!data.commit) {
|
|
69
|
+
console.log('TODO: hash', data.commit)
|
|
70
|
+
return { success: true }
|
|
71
|
+
}
|
|
72
|
+
return { success: false }
|
|
73
|
+
}
|
|
74
|
+
|
|
62
75
|
/**
|
|
63
76
|
* A helper to check settings and set up repository for further use.
|
|
64
77
|
*/
|
|
@@ -83,7 +96,7 @@ class GitBackup extends ToolPlugin {
|
|
|
83
96
|
}
|
|
84
97
|
|
|
85
98
|
// Check repo URL.
|
|
86
|
-
if (!validGitRepoName(repository)) {
|
|
99
|
+
if (!ALLOW_BAD_REPOSITORY && !validGitRepoName(repository)) {
|
|
87
100
|
error(`Bad repository address ${JSON.stringify(repository)}.`)
|
|
88
101
|
return null
|
|
89
102
|
}
|
|
@@ -129,6 +142,7 @@ class GitBackup extends ToolPlugin {
|
|
|
129
142
|
* Get a list of commits.
|
|
130
143
|
*/
|
|
131
144
|
async collectCommits(db: KnexDatabase, limit: number): Promise<unknown[]> {
|
|
145
|
+
// TODO: Would it work if we define types in ../common instead of unknown[]?
|
|
132
146
|
const setup = await this.setupRepository(db)
|
|
133
147
|
if (!setup) {
|
|
134
148
|
return []
|
|
@@ -137,13 +151,18 @@ class GitBackup extends ToolPlugin {
|
|
|
137
151
|
|
|
138
152
|
log(`Fetching commit list for DB '${db.client.config.connection.database}'.`)
|
|
139
153
|
await repo.update()
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
154
|
+
try {
|
|
155
|
+
const gitLog = await repo.git.log({ maxCount: limit })
|
|
156
|
+
return gitLog.all.map(e => ({
|
|
157
|
+
hash: e.hash,
|
|
158
|
+
date: e.date,
|
|
159
|
+
message: e.message,
|
|
160
|
+
author: `${e.author_name} ${e.author_email ? '<' + e.author_email + '>' : ''}`.trim()
|
|
161
|
+
}))
|
|
162
|
+
} catch (err) {
|
|
163
|
+
error(`Failed to get log from git repository for DB '${db.client.config.connection.database}'.`)
|
|
164
|
+
return []
|
|
165
|
+
}
|
|
147
166
|
}
|
|
148
167
|
|
|
149
168
|
/**
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React, { useState, useEffect, useRef } from 'react'
|
|
2
|
-
import { Note, IconButton, SubPanel, ToolPlugin, Dialog,
|
|
2
|
+
import { Note, IconButton, SubPanel, ToolPlugin, Dialog, Localize } from '@tasenor/common-ui'
|
|
3
3
|
import { makeObservable, observable, runInAction } from 'mobx'
|
|
4
4
|
import { Trans, useTranslation } from 'react-i18next'
|
|
5
5
|
import { Box, Table, TableBody, TableCell, TableContainer, TableRow, TextField, Typography } from '@mui/material'
|
|
6
6
|
import { Store, Timestring } from '@tasenor/common'
|
|
7
|
+
import { t } from 'i18next'
|
|
7
8
|
|
|
8
9
|
interface MakeBackupIconProps {
|
|
9
10
|
disabled: boolean
|
|
@@ -47,32 +48,68 @@ interface BackupCommitListProps {
|
|
|
47
48
|
|
|
48
49
|
function BackupCommitList(props: BackupCommitListProps): React.ReactNode {
|
|
49
50
|
const { store, backups } = props
|
|
50
|
-
const [commits, setCommits] = useState<GitBackupCommit>([])
|
|
51
|
+
const [commits, setCommits] = useState<GitBackupCommit[]>([])
|
|
52
|
+
const [fetched, setFetched] = useState(false)
|
|
53
|
+
const [restore, setRestore] = useState<GitBackupCommit|null>(null)
|
|
54
|
+
const { t } = useTranslation()
|
|
51
55
|
|
|
52
56
|
useEffect(() => {
|
|
53
57
|
if (!store.db) {
|
|
54
58
|
return
|
|
55
59
|
}
|
|
56
60
|
store.request<{ commits: GitBackupCommit[] }>(`/db/${store.db}/tools/${GitBackup.code}`, 'GET', { type: 'commits', count: 20 }).then((res) => {
|
|
61
|
+
setFetched(true)
|
|
57
62
|
if (res.success) {
|
|
58
63
|
setCommits(res.data.commits)
|
|
59
64
|
}
|
|
60
65
|
})
|
|
61
66
|
}, [store.db, backups])
|
|
62
67
|
|
|
63
|
-
|
|
64
|
-
<
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
const onRestore = (commit: GitBackupCommit) => {
|
|
69
|
+
store.request<{ commits: GitBackupCommit[] }>(`/db/${store.db}/tools/${GitBackup.code}`, 'PUT', { commit: commit.hash }).then((res) => {
|
|
70
|
+
if (res && res.success) {
|
|
71
|
+
store.addMessage(t('Backup restored successfully.'))
|
|
72
|
+
} else {
|
|
73
|
+
store.addError(t('Restoring backup failed.'))
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (fetched && commits.length === 0) {
|
|
79
|
+
return <Box>
|
|
80
|
+
<Trans>Not able to find any commits from the repository.</Trans>
|
|
81
|
+
</Box>
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return <Box>
|
|
85
|
+
<TableContainer>
|
|
86
|
+
<Table>
|
|
87
|
+
<TableBody>
|
|
88
|
+
{commits.map((commit, idx) => <TableRow key={idx}>
|
|
89
|
+
<TableCell>
|
|
90
|
+
<IconButton id="Restore" icon="update" title="restore" onClick={() => setRestore(commit)}/>
|
|
91
|
+
</TableCell>
|
|
92
|
+
<TableCell>
|
|
93
|
+
<Typography color="secondary">{commit.hash}</Typography>
|
|
94
|
+
<Typography variant="body1">{commit.message}</Typography>
|
|
95
|
+
<Typography variant="caption">{commit.author}</Typography>
|
|
96
|
+
</TableCell>
|
|
97
|
+
<TableCell>
|
|
98
|
+
<Localize date={commit.date} withTime/>
|
|
99
|
+
</TableCell>
|
|
100
|
+
</TableRow>)}
|
|
101
|
+
</TableBody>
|
|
102
|
+
</Table>
|
|
103
|
+
</TableContainer>
|
|
104
|
+
|
|
105
|
+
<Dialog isVisible={!!restore} title={t('Restore this backup?')} wider onClose={() => setRestore(null)} onConfirm={() => onRestore(restore)}>
|
|
106
|
+
{ restore && <Box>
|
|
107
|
+
<Typography variant="caption"><Localize date={restore.date} withTime/> {restore.hash}</Typography>
|
|
108
|
+
<Typography variant="body1">{restore.message}</Typography>
|
|
109
|
+
<Typography variant="caption">{restore.author}</Typography>
|
|
110
|
+
</Box>}
|
|
111
|
+
</Dialog>
|
|
112
|
+
</Box>
|
|
76
113
|
}
|
|
77
114
|
|
|
78
115
|
class GitBackup extends ToolPlugin {
|
|
@@ -105,21 +142,28 @@ class GitBackup extends ToolPlugin {
|
|
|
105
142
|
'label-repository': 'Repository URL',
|
|
106
143
|
'label-subDirectory': 'Subdirectory inside the repository',
|
|
107
144
|
'label-sshPrivateKey': 'SSH private key',
|
|
108
|
-
'icon-
|
|
145
|
+
'icon-restore': 'Restore this backup',
|
|
146
|
+
'icon-summarize-make-backup': 'Make a backup',
|
|
109
147
|
},
|
|
110
148
|
fi: {
|
|
111
149
|
'label-repository': 'Git-säilön URL',
|
|
112
150
|
'label-subDirectory': 'Alihakemiston nimi säilön sisällä',
|
|
113
151
|
'label-sshPrivateKey': 'SSH yksityinen avain',
|
|
152
|
+
'icon-restore': 'Palauta tältä varmuuskopiolta',
|
|
114
153
|
'icon-summarize-make-backup': 'Tee varmuuskopio',
|
|
115
154
|
|
|
116
155
|
'Backup for Git': 'Git-pohjainen Varmuuskopiointi',
|
|
117
156
|
'Manual backup by GitBackup {version}': 'Ylimääräinen varmuuskopio GitBackup {version}',
|
|
118
157
|
'Backup created successfully.': 'Varmuuskopion luominen onnistui.',
|
|
119
|
-
'Creating backup failed.': 'Varmuuskopion luominen ei onnistunut.'
|
|
158
|
+
'Creating backup failed.': 'Varmuuskopion luominen ei onnistunut.',
|
|
159
|
+
'Not able to find any commits from the repository.': 'Varmuuskopio vaikuttaisi olevan tyhjä.',
|
|
160
|
+
'This tool takes every night automatically one backup.': 'Tämä työkalu tekee yhden varmuuskopion joka yö.',
|
|
161
|
+
'You can also make immediately backup from the icon above.': 'Lisäksi voit tehdä ylimääräisen varmuuskopion halutessasi ylläolevasta ikonista.',
|
|
162
|
+
'Existing backups are listed below and can be restored from the icon next to them.': 'Aiemmat varmuuskopiot ovat alla listattuna. Niistä voi palauttaa minkä tahansa klikkaamalla niiden vieressä olevaa ikonia.',
|
|
163
|
+
'Backup restored successfully.': 'Varmuuskopion palautus onnistui.',
|
|
164
|
+
'Restoring backup failed.': 'Varmuuskopion palauttaminen epäonnistui.'
|
|
120
165
|
}
|
|
121
166
|
}
|
|
122
|
-
|
|
123
167
|
}
|
|
124
168
|
|
|
125
169
|
toolMenu() {
|
|
@@ -140,9 +184,9 @@ class GitBackup extends ToolPlugin {
|
|
|
140
184
|
this.backups = this.backups + 1
|
|
141
185
|
})
|
|
142
186
|
if (success) {
|
|
143
|
-
this.store.addMessage(this.t('Backup
|
|
187
|
+
this.store.addMessage(this.t('Backup restored successfully.'))
|
|
144
188
|
} else {
|
|
145
|
-
this.store.addError(this.t('
|
|
189
|
+
this.store.addError(this.t('Restoring backup failed.'))
|
|
146
190
|
}
|
|
147
191
|
})
|
|
148
192
|
}
|
|
@@ -164,6 +208,7 @@ class GitBackup extends ToolPlugin {
|
|
|
164
208
|
<SubPanel>
|
|
165
209
|
<Trans>This tool takes every night automatically one backup.</Trans><> </>
|
|
166
210
|
<Trans>You can also make immediately backup from the icon above.</Trans><> </>
|
|
211
|
+
<Trans>Existing backups are listed below and can be restored from the icon next to them.</Trans><> </>
|
|
167
212
|
</SubPanel>
|
|
168
213
|
<Box sx={{ m: 2 }}>
|
|
169
214
|
<BackupCommitList backups={this.backups} store={this.store}/>
|