backup-ssh 4.1.10 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +10 -6
- data/lib/backup.rb +3 -0
- data/lib/backup/config/dsl.rb +2 -2
- data/lib/backup/database/mongodb.rb +2 -1
- data/lib/backup/database/mysql.rb +2 -2
- data/lib/backup/database/postgresql.rb +1 -1
- data/lib/backup/model.rb +26 -1
- data/lib/backup/notifier/base.rb +30 -0
- data/lib/backup/notifier/campfire.rb +1 -7
- data/lib/backup/notifier/command.rb +102 -0
- data/lib/backup/notifier/datadog.rb +11 -20
- data/lib/backup/notifier/flowdock.rb +6 -5
- data/lib/backup/notifier/hipchat.rb +33 -8
- data/lib/backup/notifier/http_post.rb +2 -7
- data/lib/backup/notifier/mail.rb +26 -15
- data/lib/backup/notifier/nagios.rb +3 -8
- data/lib/backup/notifier/prowl.rb +8 -9
- data/lib/backup/notifier/pushover.rb +1 -7
- data/lib/backup/notifier/ses.rb +19 -8
- data/lib/backup/notifier/slack.rb +4 -10
- data/lib/backup/notifier/twitter.rb +1 -7
- data/lib/backup/notifier/zabbix.rb +1 -6
- data/lib/backup/package.rb +4 -0
- data/lib/backup/packager.rb +8 -2
- data/lib/backup/storage/base.rb +15 -3
- data/lib/backup/storage/cycler.rb +24 -14
- data/lib/backup/storage/dropbox.rb +0 -24
- data/lib/backup/storage/ftp.rb +15 -1
- data/lib/backup/storage/qiniu.rb +65 -0
- data/lib/backup/storage/s3.rb +3 -2
- data/lib/backup/syncer/rsync/base.rb +7 -1
- data/lib/backup/version.rb +1 -1
- data/templates/cli/databases/mongodb +1 -1
- data/templates/cli/notifiers/command +32 -0
- data/templates/cli/notifiers/hipchat +1 -0
- data/templates/cli/notifiers/mail +3 -0
- data/templates/cli/storages/dropbox +1 -0
- data/templates/cli/storages/ftp +1 -0
- data/templates/cli/storages/local +1 -0
- data/templates/cli/storages/qiniu +12 -0
- data/templates/cli/storages/s3 +2 -0
- data/templates/cli/storages/scp +1 -0
- data/templates/cli/storages/sftp +1 -0
- metadata +79 -46
- data/LICENSE.md +0 -24
- data/lib/backup/storage/ninefold.rb +0 -74
- data/templates/cli/storages/ninefold +0 -9
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'qiniu'
|
3
|
+
|
4
|
+
module Backup
|
5
|
+
module Storage
|
6
|
+
class Qiniu < Base
|
7
|
+
include Storage::Cycler
|
8
|
+
class Error < Backup::Error; end
|
9
|
+
|
10
|
+
##
|
11
|
+
# Qiniu API credentials
|
12
|
+
attr_accessor :access_key, :secret_key
|
13
|
+
|
14
|
+
##
|
15
|
+
# Qiniu bucket name
|
16
|
+
attr_accessor :bucket
|
17
|
+
|
18
|
+
def initialize(model, storage_id = nil)
|
19
|
+
super
|
20
|
+
|
21
|
+
@path ||= 'backups'
|
22
|
+
|
23
|
+
check_configuration
|
24
|
+
config_credentials
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
def transfer!
|
29
|
+
package.filenames.each do |filename|
|
30
|
+
src = File.join(Config.tmp_path, filename)
|
31
|
+
dest = File.join(remote_path, filename)
|
32
|
+
Logger.info "Storing '#{ dest }'..."
|
33
|
+
|
34
|
+
::Qiniu.upload_file(uptoken: ::Qiniu.generate_upload_token,
|
35
|
+
bucket: bucket,
|
36
|
+
file: src,
|
37
|
+
key: dest)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Called by the Cycler.
|
42
|
+
# Any error raised will be logged as a warning.
|
43
|
+
def remove!(package)
|
44
|
+
Logger.info "Removing backup package dated #{ package.time }..."
|
45
|
+
remote_path = remote_path_for(package)
|
46
|
+
package.filenames.each do |filename|
|
47
|
+
::Qiniu.delete(bucket, File.join(remote_path, filename))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def check_configuration
|
52
|
+
required = %w{ access_key secret_key bucket }
|
53
|
+
|
54
|
+
raise Error, <<-EOS if required.map {|name| send(name) }.any?(&:nil?)
|
55
|
+
Configuration Error
|
56
|
+
#{ required.map {|name| "##{ name }"}.join(', ') } are all required
|
57
|
+
EOS
|
58
|
+
end
|
59
|
+
|
60
|
+
def config_credentials
|
61
|
+
::Qiniu.establish_connection!(access_key: access_key, secret_key: secret_key)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/backup/storage/s3.rb
CHANGED
@@ -58,6 +58,7 @@ module Backup
|
|
58
58
|
# Supported values:
|
59
59
|
#
|
60
60
|
# - :standard (default)
|
61
|
+
# - :standard_ia
|
61
62
|
# - :reduced_redundancy
|
62
63
|
#
|
63
64
|
# Default: :standard
|
@@ -143,10 +144,10 @@ module Backup
|
|
143
144
|
#encryption must be :aes256 or nil
|
144
145
|
EOS
|
145
146
|
|
146
|
-
classes = ['STANDARD', 'REDUCED_REDUNDANCY']
|
147
|
+
classes = ['STANDARD', 'STANDARD_IA', 'REDUCED_REDUNDANCY']
|
147
148
|
raise Error, <<-EOS unless classes.include?(storage_class.to_s.upcase)
|
148
149
|
Configuration Error
|
149
|
-
#storage_class must be :standard or :reduced_redundancy
|
150
|
+
#storage_class must be :standard or :standard_ia or :reduced_redundancy
|
150
151
|
EOS
|
151
152
|
end
|
152
153
|
|
@@ -8,12 +8,14 @@ module Backup
|
|
8
8
|
##
|
9
9
|
# Additional String or Array of options for the rsync cli
|
10
10
|
attr_accessor :additional_rsync_options
|
11
|
+
attr_accessor :archive
|
11
12
|
|
12
13
|
def initialize(syncer_id = nil, &block)
|
13
14
|
super
|
14
15
|
instance_eval(&block) if block_given?
|
15
16
|
|
16
17
|
@path ||= '~/backups'
|
18
|
+
@archive = @archive.nil? ? true : @archive
|
17
19
|
end
|
18
20
|
|
19
21
|
private
|
@@ -21,7 +23,7 @@ module Backup
|
|
21
23
|
##
|
22
24
|
# Common base command for Local/Push/Pull
|
23
25
|
def rsync_command
|
24
|
-
utility(:rsync) <<
|
26
|
+
utility(:rsync) << archive_option << mirror_option << exclude_option <<
|
25
27
|
" #{ Array(additional_rsync_options).join(' ') }".rstrip
|
26
28
|
end
|
27
29
|
|
@@ -29,6 +31,10 @@ module Backup
|
|
29
31
|
mirror ? ' --delete' : ''
|
30
32
|
end
|
31
33
|
|
34
|
+
def archive_option
|
35
|
+
archive ? ' --archive' : ''
|
36
|
+
end
|
37
|
+
|
32
38
|
def exclude_option
|
33
39
|
excludes.map {|pattern| " --exclude='#{ pattern }'" }.join
|
34
40
|
end
|
data/lib/backup/version.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
##
|
2
|
+
# Command [Notifier]
|
3
|
+
#
|
4
|
+
notify_by Command do |cmd|
|
5
|
+
cmd.on_success = true
|
6
|
+
cmd.on_warning = true
|
7
|
+
cmd.on_failure = true
|
8
|
+
|
9
|
+
# Command to execute
|
10
|
+
cmd.command = 'notify-send'
|
11
|
+
|
12
|
+
# Arguments to pass to the command.
|
13
|
+
#
|
14
|
+
# Must be an array of strings or callable objects.
|
15
|
+
#
|
16
|
+
# Callables will be invoked with #call(model, status),
|
17
|
+
# and the return value used as the argument.
|
18
|
+
#
|
19
|
+
# In strings you can use the following placeholders:
|
20
|
+
#
|
21
|
+
# %l - Model label
|
22
|
+
# %t - Model trigger
|
23
|
+
# %s - Status (success/failure/warning)
|
24
|
+
# %v - Status verb (succeeded/failed/succeeded with warnings)
|
25
|
+
#
|
26
|
+
# All placeholders can be used with uppercase letters to capitalize
|
27
|
+
# the value.
|
28
|
+
#
|
29
|
+
# Defaults to ["%L %v"]
|
30
|
+
#
|
31
|
+
# cmd.args = ["Backup %L", "%V"]
|
32
|
+
end
|
data/templates/cli/storages/ftp
CHANGED
data/templates/cli/storages/s3
CHANGED
data/templates/cli/storages/scp
CHANGED
data/templates/cli/storages/sftp
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backup-ssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Manuel Meurer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: CFPropertyList
|
@@ -128,14 +128,14 @@ dependencies:
|
|
128
128
|
requirements:
|
129
129
|
- - '='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 1.5
|
131
|
+
version: 1.6.5
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - '='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 1.5
|
138
|
+
version: 1.6.5
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: equalizer
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -576,14 +576,14 @@ dependencies:
|
|
576
576
|
requirements:
|
577
577
|
- - '='
|
578
578
|
- !ruby/object:Gem::Version
|
579
|
-
version: 2.
|
579
|
+
version: 2.6.3
|
580
580
|
type: :runtime
|
581
581
|
prerelease: false
|
582
582
|
version_requirements: !ruby/object:Gem::Requirement
|
583
583
|
requirements:
|
584
584
|
- - '='
|
585
585
|
- !ruby/object:Gem::Version
|
586
|
-
version: 2.
|
586
|
+
version: 2.6.3
|
587
587
|
- !ruby/object:Gem::Dependency
|
588
588
|
name: memoizable
|
589
589
|
requirement: !ruby/object:Gem::Requirement
|
@@ -604,28 +604,28 @@ dependencies:
|
|
604
604
|
requirements:
|
605
605
|
- - '='
|
606
606
|
- !ruby/object:Gem::Version
|
607
|
-
version:
|
607
|
+
version: 2.4.3
|
608
608
|
type: :runtime
|
609
609
|
prerelease: false
|
610
610
|
version_requirements: !ruby/object:Gem::Requirement
|
611
611
|
requirements:
|
612
612
|
- - '='
|
613
613
|
- !ruby/object:Gem::Version
|
614
|
-
version:
|
614
|
+
version: 2.4.3
|
615
615
|
- !ruby/object:Gem::Dependency
|
616
|
-
name:
|
616
|
+
name: mini_portile2
|
617
617
|
requirement: !ruby/object:Gem::Requirement
|
618
618
|
requirements:
|
619
619
|
- - '='
|
620
620
|
- !ruby/object:Gem::Version
|
621
|
-
version:
|
621
|
+
version: 2.1.0
|
622
622
|
type: :runtime
|
623
623
|
prerelease: false
|
624
624
|
version_requirements: !ruby/object:Gem::Requirement
|
625
625
|
requirements:
|
626
626
|
- - '='
|
627
627
|
- !ruby/object:Gem::Version
|
628
|
-
version:
|
628
|
+
version: 2.1.0
|
629
629
|
- !ruby/object:Gem::Dependency
|
630
630
|
name: multi_json
|
631
631
|
requirement: !ruby/object:Gem::Requirement
|
@@ -702,28 +702,42 @@ dependencies:
|
|
702
702
|
requirements:
|
703
703
|
- - '='
|
704
704
|
- !ruby/object:Gem::Version
|
705
|
-
version: 2.
|
705
|
+
version: 3.2.0
|
706
706
|
type: :runtime
|
707
707
|
prerelease: false
|
708
708
|
version_requirements: !ruby/object:Gem::Requirement
|
709
709
|
requirements:
|
710
710
|
- - '='
|
711
711
|
- !ruby/object:Gem::Version
|
712
|
-
version: 2.
|
712
|
+
version: 3.2.0
|
713
|
+
- !ruby/object:Gem::Dependency
|
714
|
+
name: netrc
|
715
|
+
requirement: !ruby/object:Gem::Requirement
|
716
|
+
requirements:
|
717
|
+
- - '='
|
718
|
+
- !ruby/object:Gem::Version
|
719
|
+
version: 0.11.0
|
720
|
+
type: :runtime
|
721
|
+
prerelease: false
|
722
|
+
version_requirements: !ruby/object:Gem::Requirement
|
723
|
+
requirements:
|
724
|
+
- - '='
|
725
|
+
- !ruby/object:Gem::Version
|
726
|
+
version: 0.11.0
|
713
727
|
- !ruby/object:Gem::Dependency
|
714
728
|
name: nokogiri
|
715
729
|
requirement: !ruby/object:Gem::Requirement
|
716
730
|
requirements:
|
717
731
|
- - '='
|
718
732
|
- !ruby/object:Gem::Version
|
719
|
-
version: 1.6.
|
733
|
+
version: 1.6.8
|
720
734
|
type: :runtime
|
721
735
|
prerelease: false
|
722
736
|
version_requirements: !ruby/object:Gem::Requirement
|
723
737
|
requirements:
|
724
738
|
- - '='
|
725
739
|
- !ruby/object:Gem::Version
|
726
|
-
version: 1.6.
|
740
|
+
version: 1.6.8
|
727
741
|
- !ruby/object:Gem::Dependency
|
728
742
|
name: open4
|
729
743
|
requirement: !ruby/object:Gem::Requirement
|
@@ -753,75 +767,103 @@ dependencies:
|
|
753
767
|
- !ruby/object:Gem::Version
|
754
768
|
version: 2.0.0
|
755
769
|
- !ruby/object:Gem::Dependency
|
756
|
-
name:
|
770
|
+
name: pkg-config
|
757
771
|
requirement: !ruby/object:Gem::Requirement
|
758
772
|
requirements:
|
759
773
|
- - '='
|
760
774
|
- !ruby/object:Gem::Version
|
761
|
-
version:
|
775
|
+
version: 1.1.7
|
762
776
|
type: :runtime
|
763
777
|
prerelease: false
|
764
778
|
version_requirements: !ruby/object:Gem::Requirement
|
765
779
|
requirements:
|
766
780
|
- - '='
|
767
781
|
- !ruby/object:Gem::Version
|
768
|
-
version:
|
782
|
+
version: 1.1.7
|
769
783
|
- !ruby/object:Gem::Dependency
|
770
|
-
name:
|
784
|
+
name: qiniu
|
771
785
|
requirement: !ruby/object:Gem::Requirement
|
772
786
|
requirements:
|
773
787
|
- - '='
|
774
788
|
- !ruby/object:Gem::Version
|
775
|
-
version:
|
789
|
+
version: 6.5.1
|
776
790
|
type: :runtime
|
777
791
|
prerelease: false
|
778
792
|
version_requirements: !ruby/object:Gem::Requirement
|
779
793
|
requirements:
|
780
794
|
- - '='
|
781
795
|
- !ruby/object:Gem::Version
|
782
|
-
version:
|
796
|
+
version: 6.5.1
|
783
797
|
- !ruby/object:Gem::Dependency
|
784
|
-
name:
|
798
|
+
name: rest-client
|
785
799
|
requirement: !ruby/object:Gem::Requirement
|
786
800
|
requirements:
|
787
801
|
- - '='
|
788
802
|
- !ruby/object:Gem::Version
|
789
|
-
version:
|
803
|
+
version: 1.7.3
|
790
804
|
type: :runtime
|
791
805
|
prerelease: false
|
792
806
|
version_requirements: !ruby/object:Gem::Requirement
|
793
807
|
requirements:
|
794
808
|
- - '='
|
795
809
|
- !ruby/object:Gem::Version
|
796
|
-
version:
|
810
|
+
version: 1.7.3
|
797
811
|
- !ruby/object:Gem::Dependency
|
798
|
-
name:
|
812
|
+
name: ruby-hmac
|
799
813
|
requirement: !ruby/object:Gem::Requirement
|
800
814
|
requirements:
|
801
815
|
- - '='
|
802
816
|
- !ruby/object:Gem::Version
|
803
|
-
version: 0.
|
817
|
+
version: 0.4.0
|
804
818
|
type: :runtime
|
805
819
|
prerelease: false
|
806
820
|
version_requirements: !ruby/object:Gem::Requirement
|
807
821
|
requirements:
|
808
822
|
- - '='
|
809
823
|
- !ruby/object:Gem::Version
|
810
|
-
version: 0.
|
824
|
+
version: 0.4.0
|
811
825
|
- !ruby/object:Gem::Dependency
|
812
|
-
name:
|
826
|
+
name: simple_oauth
|
813
827
|
requirement: !ruby/object:Gem::Requirement
|
814
828
|
requirements:
|
815
829
|
- - '='
|
816
830
|
- !ruby/object:Gem::Version
|
817
|
-
version:
|
831
|
+
version: 0.2.0
|
818
832
|
type: :runtime
|
819
833
|
prerelease: false
|
820
834
|
version_requirements: !ruby/object:Gem::Requirement
|
821
835
|
requirements:
|
822
836
|
- - '='
|
823
837
|
- !ruby/object:Gem::Version
|
824
|
-
version:
|
838
|
+
version: 0.2.0
|
839
|
+
- !ruby/object:Gem::Dependency
|
840
|
+
name: thor
|
841
|
+
requirement: !ruby/object:Gem::Requirement
|
842
|
+
requirements:
|
843
|
+
- - '='
|
844
|
+
- !ruby/object:Gem::Version
|
845
|
+
version: 0.18.1
|
846
|
+
type: :runtime
|
847
|
+
prerelease: false
|
848
|
+
version_requirements: !ruby/object:Gem::Requirement
|
849
|
+
requirements:
|
850
|
+
- - '='
|
851
|
+
- !ruby/object:Gem::Version
|
852
|
+
version: 0.18.1
|
853
|
+
- !ruby/object:Gem::Dependency
|
854
|
+
name: thread_safe
|
855
|
+
requirement: !ruby/object:Gem::Requirement
|
856
|
+
requirements:
|
857
|
+
- - '='
|
858
|
+
- !ruby/object:Gem::Version
|
859
|
+
version: 0.1.3
|
860
|
+
type: :runtime
|
861
|
+
prerelease: false
|
862
|
+
version_requirements: !ruby/object:Gem::Requirement
|
863
|
+
requirements:
|
864
|
+
- - '='
|
865
|
+
- !ruby/object:Gem::Version
|
866
|
+
version: 0.1.3
|
825
867
|
- !ruby/object:Gem::Dependency
|
826
868
|
name: twitter
|
827
869
|
requirement: !ruby/object:Gem::Requirement
|
@@ -890,7 +932,6 @@ executables:
|
|
890
932
|
extensions: []
|
891
933
|
extra_rdoc_files: []
|
892
934
|
files:
|
893
|
-
- LICENSE.md
|
894
935
|
- README.md
|
895
936
|
- bin/backup
|
896
937
|
- lib/backup.rb
|
@@ -928,6 +969,7 @@ files:
|
|
928
969
|
- lib/backup/model.rb
|
929
970
|
- lib/backup/notifier/base.rb
|
930
971
|
- lib/backup/notifier/campfire.rb
|
972
|
+
- lib/backup/notifier/command.rb
|
931
973
|
- lib/backup/notifier/datadog.rb
|
932
974
|
- lib/backup/notifier/flowdock.rb
|
933
975
|
- lib/backup/notifier/hipchat.rb
|
@@ -951,7 +993,7 @@ files:
|
|
951
993
|
- lib/backup/storage/dropbox.rb
|
952
994
|
- lib/backup/storage/ftp.rb
|
953
995
|
- lib/backup/storage/local.rb
|
954
|
-
- lib/backup/storage/
|
996
|
+
- lib/backup/storage/qiniu.rb
|
955
997
|
- lib/backup/storage/rsync.rb
|
956
998
|
- lib/backup/storage/s3.rb
|
957
999
|
- lib/backup/storage/scp.rb
|
@@ -985,6 +1027,7 @@ files:
|
|
985
1027
|
- templates/cli/model
|
986
1028
|
- templates/cli/notifier/zabbix
|
987
1029
|
- templates/cli/notifiers/campfire
|
1030
|
+
- templates/cli/notifiers/command
|
988
1031
|
- templates/cli/notifiers/datadog
|
989
1032
|
- templates/cli/notifiers/flowdock
|
990
1033
|
- templates/cli/notifiers/hipchat
|
@@ -1002,7 +1045,7 @@ files:
|
|
1002
1045
|
- templates/cli/storages/dropbox
|
1003
1046
|
- templates/cli/storages/ftp
|
1004
1047
|
- templates/cli/storages/local
|
1005
|
-
- templates/cli/storages/
|
1048
|
+
- templates/cli/storages/qiniu
|
1006
1049
|
- templates/cli/storages/rsync
|
1007
1050
|
- templates/cli/storages/s3
|
1008
1051
|
- templates/cli/storages/scp
|
@@ -1024,16 +1067,7 @@ homepage: https://github.com/krautcomputing/backup/tree/ssh
|
|
1024
1067
|
licenses:
|
1025
1068
|
- MIT
|
1026
1069
|
metadata: {}
|
1027
|
-
post_install_message:
|
1028
|
-
|
1029
|
-
Thank you for installing Backup!
|
1030
|
-
|
1031
|
-
See the Release Notes for changes in this version:
|
1032
|
-
http://backup.github.io/backup/v4/release-notes
|
1033
|
-
|
1034
|
-
If you're upgrading from v3.x, be sure to read:
|
1035
|
-
http://backup.github.io/backup/v4/upgrading
|
1036
|
-
|
1070
|
+
post_install_message:
|
1037
1071
|
rdoc_options: []
|
1038
1072
|
require_paths:
|
1039
1073
|
- lib
|
@@ -1041,7 +1075,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
1041
1075
|
requirements:
|
1042
1076
|
- - ">="
|
1043
1077
|
- !ruby/object:Gem::Version
|
1044
|
-
version:
|
1078
|
+
version: '2.0'
|
1045
1079
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
1046
1080
|
requirements:
|
1047
1081
|
- - ">="
|
@@ -1049,9 +1083,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1049
1083
|
version: '0'
|
1050
1084
|
requirements: []
|
1051
1085
|
rubyforge_project:
|
1052
|
-
rubygems_version: 2.
|
1086
|
+
rubygems_version: 2.6.8
|
1053
1087
|
signing_key:
|
1054
1088
|
specification_version: 4
|
1055
1089
|
summary: Provides an elegant DSL in Ruby for performing backups on UNIX-like systems.
|
1056
1090
|
test_files: []
|
1057
|
-
has_rdoc:
|