Skip to content

Commit 135f86e

Browse files
committed
implement help for probackup commands
1 parent a6be0c3 commit 135f86e

File tree

6 files changed

+263
-127
lines changed

6 files changed

+263
-127
lines changed

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ OBJS = backup.o \
66
delete.o \
77
dir.o \
88
fetch.o \
9+
help.o \
910
init.o \
1011
parray.o \
1112
pg_probackup.o \

help.c

Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
/*-------------------------------------------------------------------------
2+
*
3+
* help.c
4+
*
5+
* Portions Copyright (c) 2017-2017, Postgres Professional
6+
*
7+
*-------------------------------------------------------------------------
8+
*/
9+
#include "pg_probackup.h"
10+
11+
static void help_init(void);
12+
static void help_backup(void);
13+
static void help_restore(void);
14+
static void help_validate(void);
15+
static void help_show(void);
16+
static void help_delete(void);
17+
static void help_set_config(void);
18+
static void help_show_config(void);
19+
20+
void
21+
help_command(char *command)
22+
{
23+
if (strcmp(command, "init") == 0)
24+
help_init();
25+
else if (strcmp(command, "backup") == 0)
26+
help_backup();
27+
else if (strcmp(command, "restore") == 0)
28+
help_restore();
29+
else if (strcmp(command, "validate") == 0)
30+
help_validate();
31+
else if (strcmp(command, "show") == 0)
32+
help_show();
33+
else if (strcmp(command, "delete") == 0)
34+
help_delete();
35+
else if (strcmp(command, "set-config") == 0)
36+
help_set_config();
37+
else if (strcmp(command, "show-config") == 0)
38+
help_show_config();
39+
else if (strcmp(command, "--help") == 0
40+
|| strcmp(command, "help") == 0
41+
|| strcmp(command, "-?") == 0
42+
|| strcmp(command, "--version") == 0
43+
|| strcmp(command, "version") == 0
44+
|| strcmp(command, "-V") == 0)
45+
printf(_("No help page for \"%s\" command. Try pg_probackup help\n"), command);
46+
else
47+
printf(_("Unknown command. Try pg_probackup help\n"));
48+
exit(0);
49+
}
50+
51+
void
52+
help_pg_probackup(void)
53+
{
54+
printf(_("\n%s - utility to manage backup/recovery of PostgreSQL database.\n\n"), PROGRAM_NAME);
55+
56+
printf(_(" %s help [COMMAND]\n"), PROGRAM_NAME);
57+
58+
printf(_("\n %s version\n"), PROGRAM_NAME);
59+
60+
printf(_("\n %s init -B backup-path -D pgdata-dir\n"), PROGRAM_NAME);
61+
62+
printf(_("\n %s set-config -B backup-dir\n"), PROGRAM_NAME);
63+
printf(_(" [-d dbname] [-h host] [-p port] [-U username]\n"));
64+
printf(_(" [--retention-redundancy=retention-redundancy]]\n"));
65+
printf(_(" [--retention-window=retention-window]\n"));
66+
67+
printf(_("\n %s show-config -B backup-dir\n"), PROGRAM_NAME);
68+
69+
printf(_("\n %s backup -B backup-path -b backup-mode\n"), PROGRAM_NAME);
70+
printf(_(" [-D pgdata-dir] [-C] [--stream [-S slot-name]] [--backup-pg-log]\n"));
71+
printf(_(" [-j num-threads] [--archive-timeout=archive-timeout]\n"));
72+
printf(_(" [--progress] [-q] [-v] [--delete-expired]\n"));
73+
printf(_(" [-d dbname] [-h host] [-p port] [-U username]\n"));
74+
75+
printf(_("\n %s restore -B backup-dir\n"), PROGRAM_NAME);
76+
printf(_(" [-D pgdata-dir] [-i backup-id] [--progress] [-q] [-v]\n"));
77+
printf(_(" [--time=time|--xid=xid [--inclusive=boolean]]\n"));
78+
printf(_(" [--timeline=timeline] [-T OLDDIR=NEWDIR]\n"));
79+
80+
printf(_("\n %s validate -B backup-dir\n"), PROGRAM_NAME);
81+
printf(_(" [-D pgdata-dir] [-i backup-id] [--progress] [-q] [-v]\n"));
82+
printf(_(" [--time=time|--xid=xid [--inclusive=boolean]]\n"));
83+
printf(_(" [--timeline=timeline]\n"));
84+
85+
printf(_("\n %s show -B backup-dir\n"), PROGRAM_NAME);
86+
printf(_(" [-i backup-id]\n"));
87+
88+
printf(_("\n %s delete -B backup-dir\n"), PROGRAM_NAME);
89+
printf(_(" [--wal] [-i backup-id | --expired]\n"));
90+
91+
if ((PROGRAM_URL || PROGRAM_EMAIL))
92+
{
93+
printf("\n");
94+
if (PROGRAM_URL)
95+
printf("Read the website for details. <%s>\n", PROGRAM_URL);
96+
if (PROGRAM_EMAIL)
97+
printf("Report bugs to <%s>.\n", PROGRAM_EMAIL);
98+
}
99+
exit(0);
100+
}
101+
102+
static void
103+
help_init(void)
104+
{
105+
printf(_("%s init -B backup-path -D pgdata-dir\n\n"), PROGRAM_NAME);
106+
printf(_(" -B, --backup-path=backup-path location of the backup storage area\n"));
107+
printf(_(" -D, --pgdata=pgdata-dir location of the database storage area\n"));
108+
}
109+
110+
static void
111+
help_backup(void)
112+
{
113+
printf(_("%s backup -B backup-path -b backup-mode\n"), PROGRAM_NAME);
114+
printf(_(" [-D pgdata-dir] [-C] [--stream [-S slot-name]] [--backup-pg-log]\n"));
115+
printf(_(" [-j num-threads] [--archive-timeout=archive-timeout]\n"));
116+
printf(_(" [--progress] [-q] [-v] [--delete-expired]\n"));
117+
printf(_(" [-d dbname] [-h host] [-p port] [-U username]\n\n"));
118+
119+
printf(_(" -B, --backup-path=backup-path location of the backup storage area\n"));
120+
printf(_(" -b, --backup-mode=backup-mode backup mode=FULL|PAGE|PTRACK\n"));
121+
printf(_(" -D, --pgdata=pgdata-dir location of the database storage area\n"));
122+
printf(_(" -C, --smooth-checkpoint do smooth checkpoint before backup\n"));
123+
printf(_(" --stream stream the transaction log and include it in the backup\n"));
124+
printf(_(" --archive-timeout wait timeout for WAL segment archiving\n"));
125+
printf(_(" -S, --slot=SLOTNAME replication slot to use\n"));
126+
printf(_(" --backup-pg-log backup of pg_log directory\n"));
127+
printf(_(" -j, --threads=NUM number of parallel threads\n"));
128+
printf(_(" --progress show progress\n"));
129+
printf(_(" -q, --quiet don't write any messages\n"));
130+
printf(_(" -v, --verbose verbose mode\n"));
131+
printf(_(" --delete-expired delete backups expired according to current\n"));
132+
printf(_(" retention policy after successful backup completion\n"));
133+
134+
printf(_("\n Connection options:\n"));
135+
printf(_(" -d, --dbname=DBNAME database to connect\n"));
136+
printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
137+
printf(_(" -p, --port=PORT database server port\n"));
138+
printf(_(" -U, --username=USERNAME user name to connect as\n"));
139+
}
140+
141+
static void
142+
help_restore(void)
143+
{
144+
printf(_("%s restore -B backup-dir\n"), PROGRAM_NAME);
145+
printf(_(" [-D pgdata-dir] [-i backup-id] [--progress] [-q] [-v]\n"));
146+
printf(_(" [--time=time|--xid=xid [--inclusive=boolean]]\n"));
147+
printf(_(" [--timeline=timeline] [-T OLDDIR=NEWDIR]\n\n"));
148+
149+
printf(_(" -B, --backup-path=backup-path location of the backup storage area\n"));
150+
printf(_(" -D, --pgdata=pgdata-dir location of the database storage area\n"));
151+
printf(_(" -i, --backup-id=backup-id backup to restore\n"));
152+
153+
printf(_(" --progress show progress\n"));
154+
printf(_(" -q, --quiet don't write any messages\n"));
155+
printf(_(" -v, --verbose verbose mode\n"));
156+
printf(_(" --time=time time stamp up to which recovery will proceed\n"));
157+
printf(_(" --xid=xid transaction ID up to which recovery will proceed\n"));
158+
printf(_(" --inclusive=boolean whether we stop just after the recovery target\n"));
159+
printf(_(" --timeline=timeline recovering into a particular timeline\n"));
160+
printf(_(" -T, --tablespace-mapping=OLDDIR=NEWDIR\n"));
161+
printf(_(" relocate the tablespace from directory OLDDIR to NEWDIR\n"));
162+
}
163+
164+
static void
165+
help_validate(void)
166+
{
167+
printf(_("%s validate -B backup-dir\n"), PROGRAM_NAME);
168+
printf(_(" [-D pgdata-dir] [-i backup-id] [--progress] [-q] [-v]\n"));
169+
printf(_(" [--time=time|--xid=xid [--inclusive=boolean]]\n"));
170+
printf(_(" [--timeline=timeline]\n\n"));
171+
172+
printf(_(" -B, --backup-path=backup-path location of the backup storage area\n"));
173+
printf(_(" -D, --pgdata=pgdata-dir location of the database storage area\n"));
174+
printf(_(" -i, --backup-id=backup-id backup to validate\n"));
175+
176+
printf(_(" --progress show progress\n"));
177+
printf(_(" -q, --quiet don't write any messages\n"));
178+
printf(_(" -v, --verbose verbose mode\n"));
179+
printf(_(" --time=time time stamp up to which recovery will proceed\n"));
180+
printf(_(" --xid=xid transaction ID up to which recovery will proceed\n"));
181+
printf(_(" --inclusive=boolean whether we stop just after the recovery target\n"));
182+
printf(_(" --timeline=timeline recovering into a particular timeline\n"));
183+
}
184+
185+
static void
186+
help_show(void)
187+
{
188+
printf(_("%s show -B backup-dir\n"), PROGRAM_NAME);
189+
printf(_(" [-i backup-id]\n\n"));
190+
191+
printf(_(" -B, --backup-path=backup-path location of the backup storage area\n"));
192+
printf(_(" -i, --backup-id=backup-id show info about specific backups\n"));
193+
}
194+
195+
static void
196+
help_delete(void)
197+
{
198+
printf(_("%s delete -B backup-dir\n"), PROGRAM_NAME);
199+
printf(_(" [--wal] [-i backup-id | --expired]\n\n"));
200+
201+
printf(_(" -B, --backup-path=backup-path location of the backup storage area\n"));
202+
printf(_(" --wal remove unnecessary wal files\n"));
203+
printf(_(" -i, --backup-id=backup-id backup to delete\n"));
204+
printf(_(" --expired delete backups expired according to current\n"));
205+
printf(_(" retention policy\n"));
206+
}
207+
208+
static void
209+
help_set_config(void)
210+
{
211+
printf(_("%s set-config -B backup-dir\n"), PROGRAM_NAME);
212+
printf(_(" [-d dbname] [-h host] [-p port] [-U username]\n"));
213+
printf(_(" [--retention-redundancy=retention-redundancy]]\n"));
214+
printf(_(" [--retention-window=retention-window]\n\n"));
215+
216+
printf(_(" -B, --backup-path=backup-path location of the backup storage area\n"));
217+
218+
printf(_("\n Connection options:\n"));
219+
printf(_(" -d, --dbname=DBNAME database to connect\n"));
220+
printf(_(" -h, --host=HOSTNAME database server host or socket directory\n"));
221+
printf(_(" -p, --port=PORT database server port\n"));
222+
printf(_(" -U, --username=USERNAME user name to connect as\n"));
223+
224+
printf(_("\n Retention options:\n"));
225+
printf(_(" --retention-redundancy=retention-redundancy\n"));
226+
printf(_(" number of full backups to keep\n"));
227+
printf(_(" --retention-window=retention-window\n"));
228+
printf(_(" number of days of recoverability\n"));
229+
230+
}
231+
232+
static void
233+
help_show_config(void)
234+
{
235+
printf(_("%s show-config -B backup-dir\n\n"), PROGRAM_NAME);
236+
237+
printf(_(" -B, --backup-path=backup-path location of the backup storage area\n"));
238+
}

pg_probackup.c

Lines changed: 20 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ char arclog_path[MAXPGPATH];
2929
pgBackup current;
3030
ProbackupSubcmd backup_subcmd;
3131

32+
bool help = false;
33+
3234
char *backup_id_string_param = NULL;
3335
bool backup_logs = false;
3436

@@ -59,6 +61,7 @@ static void opt_backup_mode(pgut_option *opt, const char *arg);
5961
static pgut_option options[] =
6062
{
6163
/* directory options */
64+
{ 'b', 1, "help", &help, SOURCE_CMDLINE },
6265
{ 's', 'D', "pgdata", &pgdata, SOURCE_CMDLINE },
6366
{ 's', 'B', "backup-path", &backup_path, SOURCE_CMDLINE },
6467
/* common options */
@@ -141,23 +144,35 @@ main(int argc, char *argv[])
141144
|| strcmp(argv[1], "help") == 0
142145
|| strcmp(argv[1], "-?") == 0)
143146
{
144-
help(true);
145-
exit(0);
147+
if (argc > 2)
148+
help_command(argv[2]);
149+
else
150+
help_pg_probackup();
146151
}
147152
else if (strcmp(argv[1], "--version") == 0
148153
|| strcmp(argv[1], "version") == 0
149154
|| strcmp(argv[1], "-V") == 0)
150155
{
151-
fprintf(stderr, "%s %s\n", PROGRAM_NAME, PROGRAM_VERSION);
152-
exit(0);
156+
if (argc == 2)
157+
{
158+
fprintf(stderr, "%s %s\n", PROGRAM_NAME, PROGRAM_VERSION);
159+
exit(0);
160+
}
161+
else if (strcmp(argv[2], "--help") == 0)
162+
help_command(argv[1]);
163+
else
164+
elog(ERROR, "Invalid arguments for \"%s\" subcommand", argv[1]);
153165
}
154166
else
155-
elog(ERROR, "Invalid subcommand");
167+
elog(ERROR, "Unknown subcommand");
156168
}
157169

158170
/* Parse command line arguments */
159171
pgut_getopt(argc, argv, options);
160172

173+
if (help)
174+
help_command(argv[2]);
175+
161176
if (backup_path == NULL)
162177
{
163178
/* Try to read BACKUP_PATH from environment variable */
@@ -263,92 +278,6 @@ main(int argc, char *argv[])
263278
return 0;
264279
}
265280

266-
/* TODO Update help in accordance with new options */
267-
void
268-
pgut_help(bool details)
269-
{
270-
printf(_("\n%s - utility to manage backup/recovery of PostgreSQL database.\n\n"), PROGRAM_NAME);
271-
272-
printf(_(" %s help\n"), PROGRAM_NAME);
273-
274-
printf(_("\n %s version\n"), PROGRAM_NAME);
275-
276-
printf(_("\n %s init -B backup-path -D pgdata-dir\n"), PROGRAM_NAME);
277-
278-
printf(_("\n %s set-config -B backup-dir\n"), PROGRAM_NAME);
279-
printf(_(" [-d dbname] [-h host] [-p port] [-U username]\n"));
280-
printf(_(" [--retention-redundancy=retention-redundancy]]\n"));
281-
printf(_(" [--retention-window=retention-window]\n"));
282-
283-
printf(_("\n %s show-config -B backup-dir\n"), PROGRAM_NAME);
284-
285-
printf(_("\n %s backup -B backup-path -b backup-mode\n"), PROGRAM_NAME);
286-
printf(_(" [-D pgdata-dir] [-C] [--stream [-S slot-name]] [--backup-pg-log]\n"));
287-
printf(_(" [-j num-threads] [--archive-timeout=archive-timeout]\n"));
288-
printf(_(" [--progress] [-q] [-v] [--delete-expired]\n"));
289-
printf(_(" [-d dbname] [-h host] [-p port] [-U username]\n"));
290-
291-
printf(_("\n %s restore -B backup-dir\n"), PROGRAM_NAME);
292-
printf(_(" [-D pgdata-dir] [-i backup-id]\n"));
293-
printf(_(" [--time=time|--xid=xid [--inclusive=boolean]]\n"));
294-
printf(_(" [--timeline=timeline] [-T OLDDIR=NEWDIR]\n"));
295-
296-
printf(_("\n %s validate -B backup-dir\n"), PROGRAM_NAME);
297-
printf(_(" [-D pgdata-dir] [-i backup-id]\n"));
298-
printf(_(" [--time=time|--xid=xid [--inclusive=boolean]]\n"));
299-
printf(_(" [--timeline=timeline] [-T OLDDIR=NEWDIR]\n"));
300-
301-
printf(_("\n %s show -B backup-dir\n"), PROGRAM_NAME);
302-
printf(_(" [-i backup-id]\n"));
303-
304-
printf(_("\n %s delete -B backup-dir\n"), PROGRAM_NAME);
305-
printf(_(" [--wal] [-i backup-id | --expired] [--force]\n"));
306-
307-
308-
// printf(_(" -B, --backup-path=backup-path location of the backup storage area\n"));
309-
// printf(_(" -D, --pgdata=pgdata-dir location of the database storage area\n"));
310-
// printf(_(" -b, --backup-mode=backup-mode backup mode=FULL|PAGE|PTRACK\n"));
311-
// printf(" Connection options:\n");
312-
// printf(" -d, --dbname=DBNAME database to connect\n");
313-
// printf(" -h, --host=HOSTNAME database server host or socket directory\n");
314-
// printf(" -p, --port=PORT database server port\n");
315-
// printf(" -U, --username=USERNAME user name to connect as\n");
316-
// printf(" -w, --no-password never prompt for password\n");
317-
// printf(" -W, --password force password prompt\n");
318-
// printf(" Retention options:\n");
319-
// printf(_(" --retention-redundancy=n-full-backups specifies how many full backups purge command should keep\n"));
320-
// printf(_(" --retention-window=n-days specifies the number of days of recoverability\n"));
321-
//
322-
//
323-
// printf(_("\nOptional p:\n"));
324-
// printf(_(" -B, --backup-path=PATH location of the backup storage area\n"));
325-
// printf(_(" -D, --pgdata=PATH location of the database storage area\n"));
326-
// /*printf(_(" -c, --check show what would have been done\n"));*/
327-
// printf(_("\nBackup options:\n"));
328-
// printf(_(" -b, --backup-mode=MODE backup mode (full, page, ptrack)\n"));
329-
// printf(_(" -C, --smooth-checkpoint do smooth checkpoint before backup\n"));
330-
// printf(_(" --stream stream the transaction log and include it in the backup\n"));
331-
// printf(_(" --archive-timeout wait timeout for WAL segment archiving\n"));
332-
// printf(_(" -S, --slot=SLOTNAME replication slot to use\n"));
333-
// printf(_(" --backup-pg-log backup of pg_log directory\n"));
334-
// printf(_(" -j, --threads=NUM number of parallel threads\n"));
335-
// printf(_(" --progress show progress\n"));
336-
// printf(_("\nRestore options:\n"));
337-
// printf(_(" --time time stamp up to which recovery will proceed\n"));
338-
// printf(_(" --xid transaction ID up to which recovery will proceed\n"));
339-
// printf(_(" --inclusive whether we stop just after the recovery target\n"));
340-
// printf(_(" --timeline recovering into a particular timeline\n"));
341-
// printf(_(" -T, --tablespace-mapping=OLDDIR=NEWDIR\n"));
342-
// printf(_(" relocate the tablespace in directory OLDDIR to NEWDIR\n"));
343-
// printf(_(" -j, --threads=NUM number of parallel threads\n"));
344-
// printf(_(" --progress show progress\n"));
345-
// printf(_("\nDelete options:\n"));
346-
// printf(_(" --wal remove unnecessary wal files\n"));
347-
// printf(_("\nRetention options:\n"));
348-
// printf(_(" --redundancy specifies how many full backups purge command should keep\n"));
349-
// printf(_(" --window specifies the number of days of recoverability\n"));
350-
}
351-
352281
static void
353282
opt_backup_mode(pgut_option *opt, const char *arg)
354283
{

0 commit comments

Comments
 (0)