File: result.rb

package info (click to toggle)
ruby-rsync 1.0.9-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 140 kB
  • sloc: ruby: 348; makefile: 3
file content (77 lines) | stat: -rw-r--r-- 2,239 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
require 'rsync/change'

module Rsync
  # The result of a sync.
  class Result
    # Exit code returned by rsync
    attr_accessor :exitcode

    # Error messages by exit code
    ERROR_CODES = {
      "0" => "Success",
      "1" => "Syntax or usage error",
      "2" => "Protocol incompatibility",
      "3" => "Errors selecting input/output files, dirs",
      "4" => "Requested action not supported: an attempt was made to manipulate 64-bit files on a platform that can not support them; or an option was specified that is supported by the client and not by the server.",
      "5" => "Error starting client-server protocol",
      "6" => "Daemon unable to append to log-file",
      "10" => "Error in socket I/O",
      "11" => "Error in file I/O",
      "12" => "Error in rsync protocol data stream",
      "13" => "Errors with program diagnostics",
      "14" => "Error in IPC code",
      "20" => "Received SIGUSR1 or SIGINT",
      "21" => "Some error returned by waitpid()",
      "22" => "Error allocating core memory buffers",
      "23" => "Partial transfer due to error",
      "24" => "Partial transfer due to vanished source files",
      "25" => "The --max-delete limit stopped deletions",
      "30" => "Timeout in data send/receive",
      "35" => "Timeout waiting for daemon connection"
    }

    # @!visibility private
    def initialize(raw, exitcode)
      @raw = raw
      @exitcode = exitcode
    end

    # Whether the rsync job was run without errors.
    # @return {Boolean}
    def success?
      @exitcode == 0
    end

    # The error message based on exit code.
    # @return {String}
    def error
      error_key = @exitcode.to_s
      if ERROR_CODES.has_key? error_key
        ERROR_CODES[error_key]
      else
        "Unknown Error"
      end
    end

    # List of changes made during this run.
    #
    # @return {Array<Change>}
    def changes
      change_list
    end

private

    def change_list
      list = []
      @raw.split("\n").each do |line|
        #if line =~ /^([<>ch.*][fdLDS][ .+\?cstTpoguax]{9}) (.*)$/
        if line =~ /^([<>ch+\.\*].{10}) (.*)$/
          detail = Change.new(line)
          list << detail if detail.changed?
        end
      end
      list
    end
  end
end