mirror of
https://github.com/kopia/kopia.git
synced 2026-03-19 22:56:29 -04:00
98 lines
2.2 KiB
Go
98 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"github.com/kopia/kopia/backup"
|
|
"github.com/kopia/kopia/repo"
|
|
|
|
kingpin "gopkg.in/alecthomas/kingpin.v2"
|
|
)
|
|
|
|
var (
|
|
backupsCommand = app.Command("backups", "List backup history.")
|
|
backupsDirectory = backupsCommand.Arg("directory", "Directory to show history of").ExistingDir()
|
|
maxResultsPerPath = backupsCommand.Flag("maxresults", "Maximum number of results.").Default("100").Int()
|
|
)
|
|
|
|
func runBackupsCommand(context *kingpin.ParseContext) error {
|
|
var options []repo.RepositoryOption
|
|
|
|
if *backupWriteBack > 0 {
|
|
options = append(options, repo.WriteBack(*backupWriteBack))
|
|
}
|
|
|
|
if *backupWriteLimit > 0 {
|
|
options = append(options, repo.WriteLimit(*backupWriteLimit*1000000))
|
|
|
|
}
|
|
|
|
vlt, err := openVault()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
mgr, err := vlt.OpenRepository()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer mgr.Close()
|
|
|
|
var prefix string
|
|
|
|
if *backupsDirectory != "" {
|
|
dir, err := filepath.Abs(*backupsDirectory)
|
|
if err != nil {
|
|
return fmt.Errorf("invalid directory: '%s': %s", *backupsDirectory, err)
|
|
}
|
|
|
|
manifest := backup.Manifest{
|
|
SourceDirectory: filepath.Clean(dir),
|
|
HostName: getBackupHostName(),
|
|
UserName: getBackupUser(),
|
|
}
|
|
prefix = manifest.SourceID() + "."
|
|
}
|
|
|
|
previous, err := vlt.List("B" + prefix)
|
|
if err != nil {
|
|
return fmt.Errorf("error listing previous backups")
|
|
}
|
|
|
|
var lastHost string
|
|
var lastUser string
|
|
var lastDir string
|
|
var count int
|
|
|
|
for _, n := range previous {
|
|
var m backup.Manifest
|
|
if err := vlt.Get(n, &m); err != nil {
|
|
return fmt.Errorf("error loading previous backup: %v", err)
|
|
}
|
|
|
|
if m.HostName != lastHost || m.UserName != lastUser || m.SourceDirectory != lastDir {
|
|
log.Printf("%v @ %v : %v", m.UserName, m.HostName, m.SourceDirectory)
|
|
lastDir = m.SourceDirectory
|
|
lastUser = m.UserName
|
|
lastHost = m.HostName
|
|
count = 0
|
|
}
|
|
|
|
if count < *maxResultsPerPath {
|
|
log.Printf(" %v %v", m.RootObjectID, m.StartTime.Format(time.RFC822))
|
|
count++
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func init() {
|
|
backupsCommand.Action(runBackupsCommand)
|
|
backupsCommand.Flag("host", "Override backup hostname.").StringVar(backupHostName)
|
|
backupsCommand.Flag("user", "Override backup user.").StringVar(backupUser)
|
|
}
|