Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 15a60d2e71 |
@@ -5,6 +5,15 @@ All notable changes to dbbackup will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [3.42.10] - 2026-01-08 "Code Quality"
|
||||
|
||||
### Fixed - Code Quality Issues
|
||||
- Removed deprecated `io/ioutil` usage (replaced with `os`)
|
||||
- Fixed `os.DirEntry.ModTime()` → `file.Info().ModTime()`
|
||||
- Removed unused fields and variables
|
||||
- Fixed ineffective assignments in TUI code
|
||||
- Fixed error strings (no capitalization, no trailing punctuation)
|
||||
|
||||
## [3.42.9] - 2026-01-08 "Diagnose Timeout Fix"
|
||||
|
||||
### Fixed - diagnose.go Timeout Bugs
|
||||
|
||||
@@ -4,8 +4,8 @@ This directory contains pre-compiled binaries for the DB Backup Tool across mult
|
||||
|
||||
## Build Information
|
||||
- **Version**: 3.42.1
|
||||
- **Build Time**: 2026-01-08_04:54:46_UTC
|
||||
- **Git Commit**: 627061c
|
||||
- **Build Time**: 2026-01-08_05:03:53_UTC
|
||||
- **Git Commit**: 9c65821
|
||||
|
||||
## Recent Updates (v1.1.0)
|
||||
- ✅ Fixed TUI progress display with line-by-line output
|
||||
|
||||
@@ -90,7 +90,7 @@ func NewAzureBackend(cfg *Config) (*AzureBackend, error) {
|
||||
}
|
||||
} else {
|
||||
// Use default Azure credential (managed identity, environment variables, etc.)
|
||||
return nil, fmt.Errorf("Azure authentication requires account name and key, or use AZURE_STORAGE_CONNECTION_STRING environment variable")
|
||||
return nil, fmt.Errorf("azure authentication requires account name and key, or use AZURE_STORAGE_CONNECTION_STRING environment variable")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ import (
|
||||
|
||||
"github.com/jackc/pgx/v5/pgxpool"
|
||||
"github.com/jackc/pgx/v5/stdlib"
|
||||
_ "github.com/jackc/pgx/v5/stdlib" // PostgreSQL driver (pgx)
|
||||
)
|
||||
|
||||
// PostgreSQL implements Database interface for PostgreSQL
|
||||
|
||||
@@ -63,7 +63,7 @@ func (b *BtrfsBackend) Detect(dataDir string) (bool, error) {
|
||||
// CreateSnapshot creates a Btrfs snapshot
|
||||
func (b *BtrfsBackend) CreateSnapshot(ctx context.Context, opts SnapshotOptions) (*Snapshot, error) {
|
||||
if b.config == nil || b.config.Subvolume == "" {
|
||||
return nil, fmt.Errorf("Btrfs subvolume not configured")
|
||||
return nil, fmt.Errorf("btrfs subvolume not configured")
|
||||
}
|
||||
|
||||
// Generate snapshot name
|
||||
|
||||
@@ -27,8 +27,7 @@ type Engine struct {
|
||||
progress progress.Indicator
|
||||
detailedReporter *progress.DetailedReporter
|
||||
dryRun bool
|
||||
debugLogPath string // Path to save debug log on error
|
||||
errorCollector *ErrorCollector // Collects detailed error info
|
||||
debugLogPath string // Path to save debug log on error
|
||||
}
|
||||
|
||||
// New creates a new restore engine
|
||||
@@ -803,8 +802,8 @@ func (e *Engine) RestoreCluster(ctx context.Context, archivePath string) error {
|
||||
if len(corruptedDumps) > 0 {
|
||||
operation.Fail("Corrupted dump files detected")
|
||||
e.progress.Fail(fmt.Sprintf("Found %d corrupted dump files - restore aborted", len(corruptedDumps)))
|
||||
return fmt.Errorf("pre-validation failed: %d corrupted dump files detected:\n %s\n\nThe backup archive appears to be damaged. You need to restore from a different backup.",
|
||||
len(corruptedDumps), strings.Join(corruptedDumps, "\n "))
|
||||
return fmt.Errorf("pre-validation failed: %d corrupted dump files detected: %s - the backup archive appears to be damaged, restore from a different backup",
|
||||
len(corruptedDumps), strings.Join(corruptedDumps, ", "))
|
||||
}
|
||||
e.log.Info("All dump files passed validation")
|
||||
|
||||
|
||||
@@ -67,7 +67,6 @@ func (m ConfirmationModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
switch msg := msg.(type) {
|
||||
case autoConfirmMsg:
|
||||
// Auto-confirm triggered
|
||||
m.confirmed = true
|
||||
if m.onConfirm != nil {
|
||||
return m.onConfirm()
|
||||
}
|
||||
@@ -95,7 +94,6 @@ func (m ConfirmationModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
|
||||
case "enter", "y":
|
||||
if msg.String() == "y" || m.cursor == 0 {
|
||||
m.confirmed = true
|
||||
// Execute the onConfirm callback if provided
|
||||
if m.onConfirm != nil {
|
||||
return m.onConfirm()
|
||||
|
||||
@@ -2,7 +2,7 @@ package tui
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -59,7 +59,7 @@ func loadHistory(cfg *config.Config) []HistoryEntry {
|
||||
var entries []HistoryEntry
|
||||
|
||||
// Read backup files from backup directory
|
||||
files, err := ioutil.ReadDir(cfg.BackupDir)
|
||||
files, err := os.ReadDir(cfg.BackupDir)
|
||||
if err != nil {
|
||||
return entries
|
||||
}
|
||||
@@ -74,6 +74,12 @@ func loadHistory(cfg *config.Config) []HistoryEntry {
|
||||
continue
|
||||
}
|
||||
|
||||
// Get file info for ModTime
|
||||
info, err := file.Info()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
var backupType string
|
||||
var database string
|
||||
|
||||
@@ -97,7 +103,7 @@ func loadHistory(cfg *config.Config) []HistoryEntry {
|
||||
entries = append(entries, HistoryEntry{
|
||||
Type: backupType,
|
||||
Database: database,
|
||||
Timestamp: file.ModTime(),
|
||||
Timestamp: info.ModTime(),
|
||||
Status: "✅ Completed",
|
||||
Filename: name,
|
||||
})
|
||||
|
||||
@@ -482,7 +482,6 @@ func (m SettingsModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
|
||||
switch msg.String() {
|
||||
case "ctrl+c", "q", "esc":
|
||||
m.quitting = true
|
||||
return m.parent, nil
|
||||
|
||||
case "up", "k":
|
||||
|
||||
Reference in New Issue
Block a user