mirror of
https://github.com/nxshock/backuper.git
synced 2025-04-19 22:11:52 +05:00
Compare commits
No commits in common. "1a97d439fc8d0cdd3fb802fe02d35a8343d28851" and "1f0f94e103111d87fdc3442002a794a77ec5ed2a" have entirely different histories.
1a97d439fc
...
1f0f94e103
49
backuper.go
49
backuper.go
@ -27,7 +27,7 @@ type Mask struct {
|
|||||||
// FindAll возвращает индекс файлов, совпавших по маске
|
// FindAll возвращает индекс файлов, совпавших по маске
|
||||||
func (b *Config) FindAll(mask string) (*Index, error) {
|
func (b *Config) FindAll(mask string) (*Index, error) {
|
||||||
b.logf(LogLevelDebug, "Поиск маски %s...", mask)
|
b.logf(LogLevelDebug, "Поиск маски %s...", mask)
|
||||||
index, err := b.index(true)
|
index, err := b.index()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("index: %v", err)
|
return nil, fmt.Errorf("index: %v", err)
|
||||||
}
|
}
|
||||||
@ -50,7 +50,7 @@ func (b *Config) FindAll(mask string) (*Index, error) {
|
|||||||
// IncrementalBackup выполняет инкрементальный бекап.
|
// IncrementalBackup выполняет инкрементальный бекап.
|
||||||
// В случае, если бекап выполняется впервые, выполняется полный бекап.
|
// В случае, если бекап выполняется впервые, выполняется полный бекап.
|
||||||
func (b *Config) IncrementalBackup() error {
|
func (b *Config) IncrementalBackup() error {
|
||||||
index, err := b.index(false)
|
index, err := b.index()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ func (b *Config) doBackup(index *Index) error {
|
|||||||
suffix = "i" // Инкрементальный бекап
|
suffix = "i" // Инкрементальный бекап
|
||||||
}
|
}
|
||||||
|
|
||||||
filePath := filepath.Join(filepath.Dir(b.filePath), b.FileName+"_"+time.Now().Local().Format(defaulFileNameTimeFormat)+suffix+defaultExt)
|
filePath := filepath.Join(filepath.Dir(b.filePath), b.FileName+"_"+time.Now().Local().Format("2006-01-02_15-04-05")+suffix+defaultExt)
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
filePath, err = filepath.Abs(filePath)
|
filePath, err = filepath.Abs(filePath)
|
||||||
@ -299,7 +299,7 @@ func (b *Config) addFileToTarWriter(filePath string, tarWriter *tar.Writer) erro
|
|||||||
|
|
||||||
// GetFileWithTime возвращает содержимое файла на указанную дату.
|
// GetFileWithTime возвращает содержимое файла на указанную дату.
|
||||||
func (b *Config) GetFileWithTime(path string, t time.Time, w io.Writer) error {
|
func (b *Config) GetFileWithTime(path string, t time.Time, w io.Writer) error {
|
||||||
index, err := b.index(true)
|
index, err := b.index()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("ошибка при построении индекса: %v", err)
|
return fmt.Errorf("ошибка при построении индекса: %v", err)
|
||||||
}
|
}
|
||||||
@ -343,45 +343,18 @@ func (b *Config) GetFileWithTime(path string, t time.Time, w io.Writer) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// fullIndex - true = все файлы, false = только от последнего полного
|
func (b *Config) index() (*Index, error) {
|
||||||
func (b *Config) index(fullIndex bool) (*Index, error) {
|
|
||||||
b.logf(LogLevelInfo, "Построение индекса текущего архива из %s...", filepath.Dir(b.filePath))
|
b.logf(LogLevelInfo, "Построение индекса текущего архива из %s...", filepath.Dir(b.filePath))
|
||||||
allFileMask := filepath.Join(filepath.Dir(b.filePath), b.FileName+"*"+defaultExt)
|
fileMask := filepath.Join(filepath.Dir(b.filePath), b.FileName+"*"+defaultExt)
|
||||||
onlyFullBackupFileMask := filepath.Join(filepath.Dir(b.filePath), b.FileName+"*f"+defaultExt)
|
|
||||||
|
|
||||||
// Get last full backup name
|
|
||||||
lastFullBackupFileName := ""
|
|
||||||
err := filepath.WalkDir(filepath.Dir(b.filePath), func(path string, info os.DirEntry, err error) error {
|
|
||||||
matched, err := filepath.Match(onlyFullBackupFileMask, path)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("filepath.WalkDir: %v", err)
|
|
||||||
}
|
|
||||||
if !matched {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
lastFullBackupFileName = path
|
|
||||||
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("filepath.WalkDir: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !fullIndex {
|
|
||||||
b.logf(LogLevelDebug, "Отсчёт производится от %s.", filepath.Base(lastFullBackupFileName))
|
|
||||||
}
|
|
||||||
|
|
||||||
var files []string
|
var files []string
|
||||||
err = filepath.WalkDir(filepath.Dir(b.filePath), func(path string, info os.DirEntry, err error) error {
|
err := filepath.Walk(filepath.Dir(b.filePath), func(path string, info os.FileInfo, err error) error {
|
||||||
matched, err := filepath.Match(allFileMask, path)
|
matched, err := filepath.Match(fileMask, path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("filepath.Match: %v", err)
|
return fmt.Errorf("filepath.Match: %v", err)
|
||||||
}
|
}
|
||||||
if matched && path >= lastFullBackupFileName {
|
if matched {
|
||||||
if fullIndex || path >= lastFullBackupFileName {
|
files = append(files, path)
|
||||||
files = append(files, path)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
@ -436,7 +409,7 @@ func (b *Config) index(fullIndex bool) (*Index, error) {
|
|||||||
|
|
||||||
// Test осуществляет проверку архивов и возвращает первую встретившуюся ошибку
|
// Test осуществляет проверку архивов и возвращает первую встретившуюся ошибку
|
||||||
func (b *Config) Test() error {
|
func (b *Config) Test() error {
|
||||||
_, err := b.index(true) // TODO: улучшить реализацию
|
_, err := b.index() // TODO: улучшить реализацию
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,4 @@ const (
|
|||||||
|
|
||||||
// Формат времени для сообщений
|
// Формат времени для сообщений
|
||||||
defaultTimeFormat = "02.01.06 15:04"
|
defaultTimeFormat = "02.01.06 15:04"
|
||||||
|
|
||||||
// Формат времени для файлов
|
|
||||||
defaulFileNameTimeFormat = "2006-01-02_15-04-05"
|
|
||||||
)
|
)
|
||||||
|
@ -14,7 +14,7 @@ import (
|
|||||||
type ExtractionPlan map[string][]string // filepath - array of internal paths
|
type ExtractionPlan map[string][]string // filepath - array of internal paths
|
||||||
|
|
||||||
func (b *Backuper) extractionPlan(mask string, t time.Time) (ExtractionPlan, error) {
|
func (b *Backuper) extractionPlan(mask string, t time.Time) (ExtractionPlan, error) {
|
||||||
index, err := b.Config.index(true)
|
index, err := b.Config.index()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("extractionPlan: %v", err)
|
return nil, fmt.Errorf("extractionPlan: %v", err)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user