mojombo-grit 0.9.4 → 1.1.1

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.
Files changed (47) hide show
  1. data/API.txt +101 -0
  2. data/History.txt +38 -2
  3. data/README.md +210 -0
  4. data/VERSION.yml +4 -0
  5. data/lib/grit.rb +13 -4
  6. data/lib/grit/blame.rb +61 -0
  7. data/lib/grit/blob.rb +11 -2
  8. data/lib/grit/commit.rb +44 -31
  9. data/lib/grit/commit_stats.rb +26 -2
  10. data/lib/grit/diff.rb +6 -6
  11. data/lib/grit/git-ruby.rb +4 -2
  12. data/lib/grit/git-ruby/file_index.rb +10 -3
  13. data/lib/grit/git-ruby/git_object.rb +9 -3
  14. data/lib/grit/git-ruby/internal/{mmap.rb → file_window.rb} +2 -2
  15. data/lib/grit/git-ruby/internal/loose.rb +6 -6
  16. data/lib/grit/git-ruby/internal/pack.rb +19 -19
  17. data/lib/grit/git-ruby/object.rb +8 -2
  18. data/lib/grit/git-ruby/repository.rb +11 -6
  19. data/lib/grit/git.rb +23 -10
  20. data/lib/grit/index.rb +12 -11
  21. data/lib/grit/merge.rb +45 -0
  22. data/lib/grit/ref.rb +20 -16
  23. data/lib/grit/repo.rb +59 -9
  24. data/lib/grit/ruby1.9.rb +7 -0
  25. data/lib/grit/submodule.rb +5 -1
  26. data/lib/grit/tag.rb +61 -66
  27. data/lib/grit/tree.rb +20 -1
  28. metadata +29 -47
  29. data/Manifest.txt +0 -71
  30. data/README.txt +0 -213
  31. data/Rakefile +0 -29
  32. data/grit.gemspec +0 -62
  33. data/lib/grit/head.rb +0 -83
  34. data/test/test_actor.rb +0 -35
  35. data/test/test_blob.rb +0 -79
  36. data/test/test_commit.rb +0 -190
  37. data/test/test_config.rb +0 -58
  38. data/test/test_diff.rb +0 -18
  39. data/test/test_git.rb +0 -64
  40. data/test/test_grit.rb +0 -32
  41. data/test/test_head.rb +0 -47
  42. data/test/test_real.rb +0 -19
  43. data/test/test_reality.rb +0 -17
  44. data/test/test_remote.rb +0 -14
  45. data/test/test_repo.rb +0 -277
  46. data/test/test_tag.rb +0 -25
  47. data/test/test_tree.rb +0 -96
@@ -0,0 +1,7 @@
1
+ class String
2
+ if ((defined? RUBY_VERSION) && (RUBY_VERSION[0..2] == "1.9"))
3
+ def getord(offset); self[offset].ord; end
4
+ else
5
+ alias :getord :[]
6
+ end
7
+ end
@@ -54,7 +54,7 @@ module Grit
54
54
  blob = commit.tree/'.gitmodules'
55
55
  return {} unless blob
56
56
 
57
- lines = blob.data.split("\n")
57
+ lines = blob.data.gsub(/\r\n?/, "\n" ).split("\n")
58
58
 
59
59
  config = {}
60
60
  current = nil
@@ -75,6 +75,10 @@ module Grit
75
75
  config
76
76
  end
77
77
 
78
+ def basename
79
+ File.basename(name)
80
+ end
81
+
78
82
  # Pretty object inspection
79
83
  def inspect
80
84
  %Q{#<Grit::Submodule "#{@id}">}
@@ -1,71 +1,66 @@
1
1
  module Grit
2
-
3
- class Tag
4
- attr_reader :name
5
- attr_reader :commit
6
-
7
- # Instantiate a new Tag
8
- # +name+ is the name of the head
9
- # +commit+ is the Commit that the head points to
10
- #
11
- # Returns Grit::Tag (baked)
12
- def initialize(name, commit)
13
- @name = name
14
- @commit = commit
15
- end
16
-
17
- # Find all Tags
18
- # +repo+ is the Repo
19
- # +options+ is a Hash of options
20
- #
21
- # Returns Grit::Tag[] (baked)
2
+
3
+ class Tag < Ref
22
4
  def self.find_all(repo, options = {})
23
- default_options = {:sort => "committerdate",
24
- :format => "%(refname)%00%(objectname)"}
25
-
26
- actual_options = default_options.merge(options)
27
-
28
- output = repo.git.for_each_ref(actual_options, "refs/tags")
29
-
30
- self.list_from_string(repo, output)
31
- end
32
-
33
- # Parse out tag information into an array of baked Tag objects
34
- # +repo+ is the Repo
35
- # +text+ is the text output from the git command
36
- #
37
- # Returns Grit::Tag[] (baked)
38
- def self.list_from_string(repo, text)
39
- tags = []
40
-
41
- text.split("\n").each do |line|
42
- tags << self.from_string(repo, line)
5
+ refs = []
6
+ already = {}
7
+
8
+ Dir.chdir(repo.path) do
9
+ files = Dir.glob(prefix + '/**/*')
10
+
11
+ files.each do |ref|
12
+ next if !File.file?(ref)
13
+
14
+ id = File.read(ref).chomp
15
+ name = ref.sub("#{prefix}/", '')
16
+ commit = commit_from_sha(repo, id)
17
+
18
+ if !already[name]
19
+ refs << self.new(name, commit)
20
+ already[name] = true
21
+ end
22
+ end
23
+
24
+ if File.file?('packed-refs')
25
+ lines = File.readlines('packed-refs')
26
+ lines.each_with_index do |line, i|
27
+ if m = /^(\w{40}) (.*?)$/.match(line)
28
+ next if !Regexp.new('^' + prefix).match(m[2])
29
+ name = m[2].sub("#{prefix}/", '')
30
+
31
+ # Annotated tags in packed-refs include a reference
32
+ # to the commit object on the following line.
33
+ next_line = lines[i+1]
34
+ if next_line && next_line[0] == ?^
35
+ commit = Commit.create(repo, :id => next_line[1..-1].chomp)
36
+ else
37
+ commit = commit_from_sha(repo, m[1])
38
+ end
39
+
40
+ if !already[name]
41
+ refs << self.new(name, commit)
42
+ already[name] = true
43
+ end
44
+ end
45
+ end
46
+ end
43
47
  end
44
-
45
- tags
48
+
49
+ refs
46
50
  end
47
-
48
- # Create a new Tag instance from the given string.
49
- # +repo+ is the Repo
50
- # +line+ is the formatted tag information
51
- #
52
- # Format
53
- # name: [a-zA-Z_/]+
54
- # <null byte>
55
- # id: [0-9A-Fa-f]{40}
56
- #
57
- # Returns Grit::Tag (baked)
58
- def self.from_string(repo, line)
59
- full_name, id = line.split("\0")
60
- name = full_name.split("/").last
61
- commit = Commit.create(repo, :id => id)
62
- self.new(name, commit)
63
- end
64
-
65
- # Pretty object inspection
66
- def inspect
67
- %Q{#<Grit::Tag "#{@name}">}
51
+
52
+ def self.commit_from_sha(repo, id)
53
+ git_ruby_repo = GitRuby::Repository.new(repo.path)
54
+ object = git_ruby_repo.get_object_by_sha1(id)
55
+
56
+ if object.type == :commit
57
+ Commit.create(repo, :id => id)
58
+ elsif object.type == :tag
59
+ Commit.create(repo, :id => object.object)
60
+ else
61
+ raise "Unknown object type."
62
+ end
68
63
  end
69
- end # Tag
70
-
71
- end # Grit
64
+ end
65
+
66
+ end
@@ -95,10 +95,29 @@ module Grit
95
95
  end
96
96
  end
97
97
 
98
+ def basename
99
+ File.basename(name)
100
+ end
101
+
98
102
  # Pretty object inspection
99
103
  def inspect
100
104
  %Q{#<Grit::Tree "#{@id}">}
101
105
  end
106
+
107
+ # Find only Tree objects from contents
108
+ def trees
109
+ contents.select {|v| v.kind_of? Tree}
110
+ end
111
+
112
+ # Find only Blob objects from contents
113
+ def blobs
114
+ contents.select {|v| v.kind_of? Blob}
115
+ end
116
+
117
+ # Compares trees by name
118
+ def <=>(other)
119
+ name <=> other.name
120
+ end
102
121
  end # Tree
103
-
122
+
104
123
  end # Grit
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mojombo-grit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Preston-Werner
@@ -10,87 +10,82 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2008-11-07 00:00:00 -08:00
13
+ date: 2009-03-31 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: diff-lcs
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
25
16
  - !ruby/object:Gem::Dependency
26
17
  name: mime-types
18
+ type: :runtime
27
19
  version_requirement:
28
20
  version_requirements: !ruby/object:Gem::Requirement
29
21
  requirements:
30
- - - ">"
22
+ - - ">="
31
23
  - !ruby/object:Gem::Version
32
- version: 0.0.0
24
+ version: "1.15"
33
25
  version:
34
26
  - !ruby/object:Gem::Dependency
35
- name: open4
27
+ name: diff-lcs
28
+ type: :runtime
36
29
  version_requirement:
37
30
  version_requirements: !ruby/object:Gem::Requirement
38
31
  requirements:
39
- - - ">"
32
+ - - ">="
40
33
  - !ruby/object:Gem::Version
41
- version: 0.0.0
34
+ version: 1.1.2
42
35
  version:
43
- description: Grit is a Ruby library for extracting information from a git repository in and object oriented manner.
44
- email: tom@rubyisawesome.com
36
+ description: Grit is a Ruby library for extracting information from a git repository in an object oriented manner.
37
+ email: tom@mojombo.com
45
38
  executables: []
46
39
 
47
40
  extensions: []
48
41
 
49
- extra_rdoc_files:
50
- - History.txt
51
- - Manifest.txt
52
- - README.txt
42
+ extra_rdoc_files: []
43
+
53
44
  files:
45
+ - API.txt
54
46
  - History.txt
55
- - README.txt
56
- - Rakefile
57
- - grit.gemspec
47
+ - README.md
48
+ - VERSION.yml
49
+ - lib/grit
58
50
  - lib/grit/actor.rb
51
+ - lib/grit/blame.rb
59
52
  - lib/grit/blob.rb
60
53
  - lib/grit/commit.rb
61
54
  - lib/grit/commit_stats.rb
62
55
  - lib/grit/config.rb
63
56
  - lib/grit/diff.rb
64
57
  - lib/grit/errors.rb
58
+ - lib/grit/git-ruby
65
59
  - lib/grit/git-ruby/commit_db.rb
66
60
  - lib/grit/git-ruby/file_index.rb
67
61
  - lib/grit/git-ruby/git_object.rb
62
+ - lib/grit/git-ruby/internal
63
+ - lib/grit/git-ruby/internal/file_window.rb
68
64
  - lib/grit/git-ruby/internal/loose.rb
69
- - lib/grit/git-ruby/internal/mmap.rb
70
65
  - lib/grit/git-ruby/internal/pack.rb
71
66
  - lib/grit/git-ruby/internal/raw_object.rb
72
67
  - lib/grit/git-ruby/object.rb
73
68
  - lib/grit/git-ruby/repository.rb
74
69
  - lib/grit/git-ruby.rb
75
70
  - lib/grit/git.rb
76
- - lib/grit/head.rb
77
71
  - lib/grit/index.rb
78
72
  - lib/grit/lazy.rb
73
+ - lib/grit/merge.rb
79
74
  - lib/grit/ref.rb
80
75
  - lib/grit/repo.rb
76
+ - lib/grit/ruby1.9.rb
81
77
  - lib/grit/status.rb
82
78
  - lib/grit/submodule.rb
83
79
  - lib/grit/tag.rb
84
80
  - lib/grit/tree.rb
85
81
  - lib/grit.rb
86
82
  - lib/open3_detach.rb
87
- - Manifest.txt
88
83
  has_rdoc: true
89
84
  homepage: http://github.com/mojombo/grit
90
85
  post_install_message:
91
86
  rdoc_options:
92
- - --main
93
- - README.txt
87
+ - --inline-source
88
+ - --charset=UTF-8
94
89
  require_paths:
95
90
  - lib
96
91
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -107,23 +102,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
102
  version:
108
103
  requirements: []
109
104
 
110
- rubyforge_project:
105
+ rubyforge_project: grit
111
106
  rubygems_version: 1.2.0
112
107
  signing_key:
113
108
  specification_version: 2
114
- summary: Object model interface to a git repo
115
- test_files:
116
- - test/test_actor.rb
117
- - test/test_blob.rb
118
- - test/test_commit.rb
119
- - test/test_config.rb
120
- - test/test_diff.rb
121
- - test/test_git.rb
122
- - test/test_grit.rb
123
- - test/test_head.rb
124
- - test/test_real.rb
125
- - test/test_reality.rb
126
- - test/test_remote.rb
127
- - test/test_repo.rb
128
- - test/test_tag.rb
129
- - test/test_tree.rb
109
+ summary: Grit is a Ruby library for extracting information from a git repository in an object oriented manner.
110
+ test_files: []
111
+
@@ -1,71 +0,0 @@
1
- History.txt
2
- Manifest.txt
3
- README.txt
4
- Rakefile
5
- grit.gemspec
6
- lib/grit/actor.rb
7
- lib/grit/blob.rb
8
- lib/grit/commit.rb
9
- lib/grit/commit_stats.rb
10
- lib/grit/config.rb
11
- lib/grit/diff.rb
12
- lib/grit/errors.rb
13
- lib/grit/git-ruby/commit_db.rb
14
- lib/grit/git-ruby/file_index.rb
15
- lib/grit/git-ruby/git_object.rb
16
- lib/grit/git-ruby/internal/loose.rb
17
- lib/grit/git-ruby/internal/mmap.rb
18
- lib/grit/git-ruby/internal/pack.rb
19
- lib/grit/git-ruby/internal/raw_object.rb
20
- lib/grit/git-ruby/object.rb
21
- lib/grit/git-ruby/repository.rb
22
- lib/grit/git-ruby.rb
23
- lib/grit/git.rb
24
- lib/grit/head.rb
25
- lib/grit/index.rb
26
- lib/grit/lazy.rb
27
- lib/grit/ref.rb
28
- lib/grit/repo.rb
29
- lib/grit/status.rb
30
- lib/grit/submodule.rb
31
- lib/grit/tag.rb
32
- lib/grit/tree.rb
33
- lib/grit.rb
34
- test/fixtures/blame
35
- test/fixtures/cat_file_blob
36
- test/fixtures/cat_file_blob_size
37
- test/fixtures/diff_2
38
- test/fixtures/diff_2f
39
- test/fixtures/diff_f
40
- test/fixtures/diff_i
41
- test/fixtures/diff_mode_only
42
- test/fixtures/diff_new_mode
43
- test/fixtures/diff_p
44
- test/fixtures/for_each_ref
45
- test/fixtures/for_each_ref_remotes
46
- test/fixtures/for_each_ref_tags
47
- test/fixtures/ls_tree_a
48
- test/fixtures/ls_tree_b
49
- test/fixtures/ls_tree_commit
50
- test/fixtures/rev_list
51
- test/fixtures/rev_list_count
52
- test/fixtures/rev_list_single
53
- test/fixtures/rev_parse
54
- test/fixtures/show_empty_commit
55
- test/fixtures/simple_config
56
- test/helper.rb
57
- test/profile.rb
58
- test/suite.rb
59
- test/test_actor.rb
60
- test/test_blob.rb
61
- test/test_commit.rb
62
- test/test_config.rb
63
- test/test_diff.rb
64
- test/test_git.rb
65
- test/test_grit.rb
66
- test/test_head.rb
67
- test/test_reality.rb
68
- test/test_remote.rb
69
- test/test_repo.rb
70
- test/test_tag.rb
71
- test/test_tree.rb
data/README.txt DELETED
@@ -1,213 +0,0 @@
1
- grit
2
- by Tom Preston-Werner, Scott Chacon
3
- http://github.com/mojombo/grit
4
-
5
- == DESCRIPTION:
6
-
7
- Grit is a Ruby library for extracting information from a git repository in and
8
- object oriented manner.
9
-
10
- == REQUIREMENTS:
11
-
12
- * git (http://git-scm.com) tested with 1.6.0.2
13
-
14
- == INSTALL:
15
-
16
- $ gem sources -a http://gems.github.com/ (you only need to do this once)
17
- $ gem install mojombo-grit
18
-
19
- == SOURCE:
20
-
21
- Grit's git repo is available on GitHub, which can be browsed at:
22
-
23
- http://github.com/mojombo/grit
24
-
25
- and cloned from:
26
-
27
- git://github.com/mojombo/grit.git
28
-
29
- == USAGE:
30
-
31
- Grit gives you object model access to your git repository. Once you have
32
- created a repository object, you can traverse it to find parent commit(s),
33
- trees, blobs, etc.
34
-
35
- = Initialize a Repo object
36
-
37
- The first step is to create a Grit::Repo object to represent your repo. I
38
- include the Grit module so reduce typing.
39
-
40
- require 'mojombo-grit'
41
- include Grit
42
- repo = Repo.new("/Users/tom/dev/grit")
43
-
44
- In the above example, the directory /Users/tom/dev/grit is my working
45
- repo and contains the .git directory. You can also initialize Grit with a
46
- bare repo.
47
-
48
- repo = Repo.new("/var/git/grit.git")
49
-
50
- = Getting a list of commits
51
-
52
- From the Repo object, you can get a list of commits as an array of Commit
53
- objects.
54
-
55
- repo.commits
56
- # => [#<Grit::Commit "e80bbd2ce67651aa18e57fb0b43618ad4baf7750">,
57
- #<Grit::Commit "91169e1f5fa4de2eaea3f176461f5dc784796769">,
58
- #<Grit::Commit "038af8c329ef7c1bae4568b98bd5c58510465493">,
59
- #<Grit::Commit "40d3057d09a7a4d61059bca9dca5ae698de58cbe">,
60
- #<Grit::Commit "4ea50f4754937bf19461af58ce3b3d24c77311d9">]
61
-
62
- Called without arguments, Repo#commits returns a list of up to ten commits
63
- reachable by the master branch (starting at the latest commit). You can ask
64
- for commits beginning at a different branch, commit, tag, etc.
65
-
66
- repo.commits('mybranch')
67
- repo.commits('40d3057d09a7a4d61059bca9dca5ae698de58cbe')
68
- repo.commits('v0.1')
69
-
70
- You can specify the maximum number of commits to return.
71
-
72
- repo.commits('master', 100)
73
-
74
- If you need paging, you can specify a number of commits to skip.
75
-
76
- repo.commits('master', 10, 20)
77
-
78
- The above will return commits 21-30 from the commit list.
79
-
80
- = The Commit object
81
-
82
- Commit objects contain information about that commit.
83
-
84
- head = repo.commits.first
85
-
86
- head.id
87
- # => "e80bbd2ce67651aa18e57fb0b43618ad4baf7750"
88
-
89
- head.parents
90
- # => [#<Grit::Commit "91169e1f5fa4de2eaea3f176461f5dc784796769">]
91
-
92
- head.tree
93
- # => #<Grit::Tree "3536eb9abac69c3e4db583ad38f3d30f8db4771f">
94
-
95
- head.author
96
- # => #<Grit::Actor "Tom Preston-Werner <tom@mojombo.com>">
97
-
98
- head.authored_date
99
- # => Wed Oct 24 22:02:31 -0700 2007
100
-
101
- head.committer
102
- # => #<Grit::Actor "Tom Preston-Werner <tom@mojombo.com>">
103
-
104
- head.committed_date
105
- # => Wed Oct 24 22:02:31 -0700 2007
106
-
107
- head.message
108
- # => "add Actor inspect"
109
-
110
- You can traverse a commit's ancestry by chaining calls to #parents.
111
-
112
- repo.commits.first.parents[0].parents[0].parents[0]
113
-
114
- The above corresponds to master^^^ or master~3 in git parlance.
115
-
116
- = The Tree object
117
-
118
- A tree records pointers to the contents of a directory. Let's say you want
119
- the root tree of the latest commit on the master branch.
120
-
121
- tree = repo.commits.first.tree
122
- # => #<Grit::Tree "3536eb9abac69c3e4db583ad38f3d30f8db4771f">
123
-
124
- tree.id
125
- # => "3536eb9abac69c3e4db583ad38f3d30f8db4771f"
126
-
127
- Once you have a tree, you can get the contents.
128
-
129
- contents = tree.contents
130
- # => [#<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">,
131
- #<Grit::Blob "81d2c27608b352814cbe979a6acd678d30219678">,
132
- #<Grit::Tree "c3d07b0083f01a6e1ac969a0f32b8d06f20c62e5">,
133
- #<Grit::Tree "4d00fe177a8407dbbc64a24dbfc564762c0922d8">]
134
-
135
- This tree contains two Blob objects and two Tree objects. The trees are
136
- subdirectories and the blobs are files. Trees below the root have additional
137
- attributes.
138
-
139
- contents.last.name
140
- # => "lib"
141
-
142
- contents.last.mode
143
- # => "040000"
144
-
145
- There is a convenience method that allows you to get a named sub-object
146
- from a tree.
147
-
148
- tree/"lib"
149
- # => #<Grit::Tree "e74893a3d8a25cbb1367cf241cc741bfd503c4b2">
150
-
151
- You can also get a tree directly from the repo if you know its name.
152
-
153
- repo.tree
154
- # => #<Grit::Tree "master">
155
-
156
- repo.tree("91169e1f5fa4de2eaea3f176461f5dc784796769")
157
- # => #<Grit::Tree "91169e1f5fa4de2eaea3f176461f5dc784796769">
158
-
159
- = The Blob object
160
-
161
- A blob represents a file. Trees often contain blobs.
162
-
163
- blob = tree.contents.first
164
- # => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
165
-
166
- A blob has certain attributes.
167
-
168
- blob.id
169
- # => "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666"
170
-
171
- blob.name
172
- # => "README.txt"
173
-
174
- blob.mode
175
- # => "100644"
176
-
177
- blob.size
178
- # => 7726
179
-
180
- You can get the data of a blob as a string.
181
-
182
- blob.data
183
- # => "Grit is a library to ..."
184
-
185
- You can also get a blob directly from the repo if you know its name.
186
-
187
- repo.blob("4ebc8aea50e0a67e000ba29a30809d0a7b9b2666")
188
- # => #<Grit::Blob "4ebc8aea50e0a67e000ba29a30809d0a7b9b2666">
189
-
190
- == LICENSE:
191
-
192
- (The MIT License)
193
-
194
- Copyright (c) 2007 Tom Preston-Werner
195
-
196
- Permission is hereby granted, free of charge, to any person obtaining
197
- a copy of this software and associated documentation files (the
198
- 'Software'), to deal in the Software without restriction, including
199
- without limitation the rights to use, copy, modify, merge, publish,
200
- distribute, sublicense, and/or sell copies of the Software, and to
201
- permit persons to whom the Software is furnished to do so, subject to
202
- the following conditions:
203
-
204
- The above copyright notice and this permission notice shall be
205
- included in all copies or substantial portions of the Software.
206
-
207
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
208
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
209
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
210
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
211
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
212
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
213
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.