mate 1.3.0 → 2.0.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 +8 -8
- data/.gitignore +1 -0
- data/README.markdown +3 -3
- data/bin/tm +3 -3
- data/bin/tm2 +12 -0
- data/lib/mate/bin.rb +21 -0
- data/lib/mate/tm_properties/ignores.rb +68 -0
- data/lib/mate/tm_properties.rb +30 -0
- data/lib/mate/tmproj/ignores.rb +3 -2
- data/mate.gemspec +1 -1
- metadata +7 -3
- data/lib/mate.rb +0 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MzIwZmQ2ZThmODEzZTQ4NDA1MmJiMTdiZDZiNDg3NmE5MzFiYTQwNg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NjExZTBmMmU1MzY4NjFlYTNjNzU5YjlmZDNhOGVkZDIzYzhmZTI4Yg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
M2VlYjU1ZmJjNjk4OWYyODFlNzdhZWM0MGZkMGM4MTYzMjY2ZWMwZmIwMjJl
|
10
|
+
ZjBjZGQ3OTEyOGQ5OWNjNjlkNjRjNWE2NjU2NzgwYWJmYTIyZTA2Y2NkYmQ1
|
11
|
+
NzYwOWNiNDI0ZTZhMTNmODIwMDhhY2UyZWUwNTZmODllNWM1NjY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZWY3OWI5NjljMzYwNzg0YjdmNGQ0YmQ2YmIzNDEwZDcxMTJhOWExMzA2NjA1
|
14
|
+
MDY1MGE1ODlmZjNmYzBjOGM1MDNjY2IzMjgwZDMxNmY4YTZiODJmZTVmZGQ1
|
15
|
+
OTA2N2Y4YWQwNTI4ZjBhYzhhZDRhNzBlNWIwZjA1MWY2NDhhNWE=
|
data/.gitignore
CHANGED
data/README.markdown
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# mate
|
2
2
|
|
3
|
-
TextMate project builder using git ignores for exclusions
|
3
|
+
TextMate project builder and TextMate 2 properties builder using git ignores for exclusions.
|
4
4
|
|
5
|
-
You can add `alias mate='tm'` to your `.profile`, `.bash_profile` …
|
5
|
+
You can add `alias mate='tm'` or `alias mate='tm2'` to your `.profile`, `.bash_profile` …
|
6
6
|
|
7
|
-
When `tm` command (or `mate` if aliased) is called with one or more paths and any of them is a directory, than project is created in `~/.tmprojs/` and opened. Its file and folder filters are built based on all types of git ignores (global, `.gitignore` and `.git/info/exclude`) and special `.tmignore` which works like other ignore files for project but doesn't affect git itself (you can use global `~/.tmignore` file), also `.git` folder and certain files (images, archives, media files, logs and some other binary files) are filtered.
|
7
|
+
When `tm` command (or `mate` if aliased) is called with one or more paths and any of them is a directory, than project is created in `~/.tmprojs/` and opened. When `tm2` command (or `mate` if aliased) is called with one or more paths, for all directories a `.tm_properties` file is generated or changed and mate is called. Its file and folder filters are built based on all types of git ignores (global, `.gitignore` and `.git/info/exclude`) and special `.tmignore` which works like other ignore files for project but doesn't affect git itself (you can use global `~/.tmignore` file), also `.git` folder and certain files (images, archives, media files, logs and some other binary files) are filtered.
|
8
8
|
|
9
9
|
## Copyright
|
10
10
|
|
data/bin/tm
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'mate'
|
3
|
+
require 'mate/bin'
|
4
|
+
require 'mate/tmproj'
|
4
5
|
|
5
6
|
if !ARGV.empty? && ARGV.all?(&File.method(:exist?)) && ARGV.any?(&File.method(:directory?))
|
6
7
|
Mate::Tmproj.new(ARGV).open
|
7
8
|
else
|
8
|
-
|
9
|
-
system mate, *ARGV
|
9
|
+
system Mate::Bin.v1, *ARGV
|
10
10
|
end
|
data/bin/tm2
ADDED
data/lib/mate/bin.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'shellwords'
|
2
|
+
|
3
|
+
module Mate
|
4
|
+
module Bin
|
5
|
+
class << self
|
6
|
+
def v1
|
7
|
+
mate_version(/^mate r\d+/) or abort 'Can\'t find mate binary v1'
|
8
|
+
end
|
9
|
+
|
10
|
+
def v2
|
11
|
+
mate_version(/^mate 2.\d+/) or abort 'Can\'t find mate binary v2'
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def mate_version(regexp)
|
17
|
+
IO.popen('which -a mate', &:readlines).map(&:strip).find{ |bin| `#{bin.shellescape} -v` =~ regexp }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Mate
|
2
|
+
class TmProperties::Ignores
|
3
|
+
GENERATED_SUFFIX = "## GENERATED ##"
|
4
|
+
GENERATED_R = /^exclude(?:Directories)? = .* #{Regexp.escape(GENERATED_SUFFIX)}$/
|
5
|
+
|
6
|
+
attr_reader :dir
|
7
|
+
def initialize(dir)
|
8
|
+
@dir = dir
|
9
|
+
@exclude = ['**/.git']
|
10
|
+
@exclude_directories = []
|
11
|
+
|
12
|
+
process(dir, '.', Pathname(`git config --get core.excludesfile`.strip).expand_path)
|
13
|
+
process(dir, '.', Pathname('~/.tmignore').expand_path)
|
14
|
+
|
15
|
+
dir.find do |path|
|
16
|
+
if path.directory?
|
17
|
+
%w[.gitignore .tmignore .git/info/exclude].each do |ignore_file_name|
|
18
|
+
if (ignore_file = path + ignore_file_name).file?
|
19
|
+
process(dir, path.relative_path_from(dir).to_s, ignore_file)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def lines
|
27
|
+
escaped_dir = glob_escape(dir.to_s)
|
28
|
+
[
|
29
|
+
"exclude = '#{escaped_dir}/#{glob_join(@exclude)}' #{GENERATED_SUFFIX}",
|
30
|
+
"excludeDirectories = '#{escaped_dir}/#{glob_join(@exclude_directories)}' #{GENERATED_SUFFIX}",
|
31
|
+
]
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def process(parent, subdirectory, ignore_file)
|
37
|
+
return unless ignore_file.exist?
|
38
|
+
|
39
|
+
prefix = subdirectory == '.' ? '' : glob_escape("#{subdirectory}/")
|
40
|
+
|
41
|
+
ignore_file.readlines.map do |line|
|
42
|
+
line.lstrip[/(.*?)(\r?\n)?$/, 1] # this strange stuff strips line, but allows mac Icon\r files to be ignored
|
43
|
+
end.reject do |line|
|
44
|
+
line.empty? || line =~ /^\#/
|
45
|
+
end.each do |pattern|
|
46
|
+
negate = pattern.sub!(/^\!/, '')
|
47
|
+
unless pattern.sub!(/^\//, '')
|
48
|
+
pattern = "**/#{pattern}"
|
49
|
+
end
|
50
|
+
pattern = "#{prefix}#{pattern}"
|
51
|
+
list = (pattern.sub!(/\/$/, '') ? @exclude_directories : @exclude)
|
52
|
+
if negate
|
53
|
+
list.delete(pattern) # negation only works for exact matches
|
54
|
+
else
|
55
|
+
list << pattern
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def glob_escape(string)
|
61
|
+
string.gsub(/([\*\?\[\]\{\}])/, '\\\\\1')
|
62
|
+
end
|
63
|
+
|
64
|
+
def glob_join(list)
|
65
|
+
list.length == 1 ? list : "{#{list.join(',')}}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
module Mate
|
4
|
+
class TmProperties
|
5
|
+
attr_reader :dir, :file
|
6
|
+
def initialize(dir)
|
7
|
+
@dir = Pathname(dir).expand_path
|
8
|
+
@file = @dir + '.tm_properties'
|
9
|
+
end
|
10
|
+
|
11
|
+
def save
|
12
|
+
ignores = Ignores.new(dir)
|
13
|
+
|
14
|
+
lines = if file.exist?
|
15
|
+
file.readlines.reject do |line|
|
16
|
+
line =~ Ignores::GENERATED_R
|
17
|
+
end
|
18
|
+
else
|
19
|
+
[]
|
20
|
+
end
|
21
|
+
|
22
|
+
@file.open('w') do |f|
|
23
|
+
f.puts ignores.lines
|
24
|
+
f.puts lines
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
require 'mate/tm_properties/ignores'
|
data/lib/mate/tmproj/ignores.rb
CHANGED
@@ -57,8 +57,9 @@ module Mate
|
|
57
57
|
line.empty? || %w[# !].include?(line[0, 1])
|
58
58
|
end.each do |line|
|
59
59
|
pattern = glob2regexp(line)
|
60
|
-
|
61
|
-
|
60
|
+
unless pattern.sub!(/^\//, '')
|
61
|
+
pattern = "#{DOUBLE_ASTERISK_R}#{pattern}"
|
62
|
+
end
|
62
63
|
unless pattern.sub!(/\/$/, '')
|
63
64
|
current_file_pattern << pattern
|
64
65
|
end
|
data/mate.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Kuchin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: plist
|
@@ -28,6 +28,7 @@ description:
|
|
28
28
|
email:
|
29
29
|
executables:
|
30
30
|
- tm
|
31
|
+
- tm2
|
31
32
|
extensions: []
|
32
33
|
extra_rdoc_files: []
|
33
34
|
files:
|
@@ -35,7 +36,10 @@ files:
|
|
35
36
|
- LICENSE.txt
|
36
37
|
- README.markdown
|
37
38
|
- bin/tm
|
38
|
-
-
|
39
|
+
- bin/tm2
|
40
|
+
- lib/mate/bin.rb
|
41
|
+
- lib/mate/tm_properties.rb
|
42
|
+
- lib/mate/tm_properties/ignores.rb
|
39
43
|
- lib/mate/tmproj.rb
|
40
44
|
- lib/mate/tmproj/ignores.rb
|
41
45
|
- mate.gemspec
|
data/lib/mate.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'mate/tmproj'
|