@@ -256,6 +256,8 @@ catalog_get_backup_list(time_t requested_backup_id)
256256 parray * backups = NULL ;
257257 pgBackup * backup = NULL ;
258258
259+ int i ;
260+
259261 /* open backup instance backups directory */
260262 date_dir = opendir (backup_instance_path );
261263 if (date_dir == NULL )
@@ -283,6 +285,7 @@ catalog_get_backup_list(time_t requested_backup_id)
283285 /* read backup information from BACKUP_CONTROL_FILE */
284286 snprintf (backup_conf_path , MAXPGPATH , "%s/%s" , date_path , BACKUP_CONTROL_FILE );
285287 backup = readBackupControlFile (backup_conf_path );
288+ backup -> backup_id = backup -> start_time ;
286289
287290 /* ignore corrupted backups */
288291 if (backup )
@@ -316,6 +319,30 @@ catalog_get_backup_list(time_t requested_backup_id)
316319
317320 parray_qsort (backups , pgBackupCompareIdDesc );
318321
322+ /* Link incremental backups with their ancestors.*/
323+ for (i = 0 ; i < parray_num (backups ); i ++ )
324+ {
325+ pgBackup * curr = parray_get (backups , i );
326+
327+ int j ;
328+
329+ if (curr -> backup_mode == BACKUP_MODE_FULL )
330+ continue ;
331+
332+ for (j = i + 1 ; j < parray_num (backups ); j ++ )
333+ {
334+ pgBackup * ancestor = parray_get (backups , j );
335+
336+ if (ancestor -> start_time == curr -> parent_backup )
337+ {
338+ curr -> parent_backup_link = ancestor ;
339+ /* elog(INFO, "curr %s, ancestor %s j=%d", base36enc_dup(curr->start_time),
340+ base36enc_dup(ancestor->start_time), j); */
341+ break ;
342+ }
343+ }
344+ }
345+
319346 return backups ;
320347
321348err_proc :
0 commit comments