extattr 0.2 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 53957e04a2ee7834088849a2f73415f363d24e23
4
- data.tar.gz: 2f649f3e25c9b0a8a0278a5f928298d2719d061e
2
+ SHA256:
3
+ metadata.gz: 0a1d94f6586158eb3abf46fb3fc8d43edd251763379f32e57f77ebfaa1db0a6f
4
+ data.tar.gz: 80e8c90ee1e866018f7ddc06d621f733f33276b5beaeac8cd9687da3a086a9a1
5
5
  SHA512:
6
- metadata.gz: a2cff71bea005342d08ed40463d99a53259b88e2a2d421c9fae98719096f0fd6431e152159148750093813a30b1066ede5ea078e90798ef71d9ea1a4ad7e1fd9
7
- data.tar.gz: cb69dfc4e4c68b2041694922917a35a56df7334d5a0c8c06c2def76bafe2a8e3c2e2c69d3105a3e9603b132ef2b8f46f24abc045c8e57142c6823488360c188f
6
+ metadata.gz: ccd9f917160b92b4cc52e02d56505b5824750a73442b8bad7d71041e3e5bd3f0b81dc2a93b5db14312093df65e12fca78085b7f0fc91c2263c53571821ff5679
7
+ data.tar.gz: 0b68f33f665fc50938567a64f8adb3ecdec402c699b3bc26e143a41a73ffd489c6b5d6ffdfc5ee813a82f26bef9ff9b1df4e3850ff2bb853274525fefcb86d74
data/HISTORY.ja.md ADDED
@@ -0,0 +1,49 @@
1
+ # extattr-0.4
2
+
3
+ - Ruby 3 の `Ractor` への対応 (thanks @okeeblow, https://github.com/dearblue/ruby-extattr/pull/1)
4
+ - `bin/extattr` コマンドラインプログラムを削除
5
+
6
+ まだ小さな不具合があり、調整が必要です。
7
+ 独立した gem `extattr-cli` として提供することを計画しています。
8
+
9
+
10
+ # extattr-0.3
11
+
12
+ extattr-0.2 との互換性はありません。
13
+
14
+ - `ExtAttr` モジュールを追加して実装をそちらに移動
15
+ - `File` クラスに対するメソッドの追加は、リファインメント機能によって拡張されます。
16
+ ```ruby
17
+ using ExtAttr
18
+ ```
19
+ - `File::EXTATTR_VERSION` 定数は冗長と判断し削除しました。
20
+ - `ExtAttr::Accessor` クラスの追加
21
+ - 拡張属性の操作に特化したオブジェクトを扱えるようになりました。
22
+ - `bin/extattr` コマンドラインプログラムの追加
23
+ - mingw でライブラリを構築する時 C 実行時ライブラリを静的リンクするように変更
24
+
25
+ # extattr-0.2
26
+
27
+ * セーフレベルに関する改善
28
+ * `$SAFE` と汚染状態を確認するようになりました
29
+ * 汚染状態を伝播させるようになりました
30
+ * バージョン情報と実装 API に関する情報の取得
31
+ * `File::EXTATTR_VERSION` 定数によって、バージョン情報が取得できるようになりました
32
+ * `File::EXTATTR_IMPLEMENT` 定数によって、実装に関する情報が取得できるようになりました
33
+ * 機能の改善
34
+ * `File.extattr_each` / `File#extattr_each` によって、ファイル拡張属性の名前と値を繰り返し取得できるようになりました
35
+ * Windows 版に関する改善
36
+ * `File::EXTATTR_NAMESPACE_SYSTEM` によって、本来の拡張ファイル属性の操作が行えるようになりました
37
+ (NtQueryEaFile / NtSetEaFile)
38
+
39
+ # extattr-0.1.2
40
+
41
+ # extattr-0.1.1
42
+
43
+ # extattr-0.1
44
+
45
+ はじめてのりりーす
46
+
47
+ * 拡張ファイル属性の一覧、取得、設定、削除を行うことが出来ます
48
+ * **セキュリティリスクあり**: `$SAFE` の確認や汚染状態の伝播を行ないません
49
+ * Windows 版では、NTFS ADS に対する操作となります。`File::EXTATTR_NAMESPACE_USER` のみが有効です
data/LICENSE.md CHANGED
@@ -1,4 +1,7 @@
1
- #@markup markdown
1
+
2
+ extattr license (2-clause BSD License)
3
+
4
+ - - - -
2
5
 
3
6
  Copyright (c) 2012, dearblue. All rights reserved.
4
7
 
data/QUICKREF.ja.md ADDED
@@ -0,0 +1,112 @@
1
+ # Quick Reference
2
+
3
+ メソッド名に『!』がついているものはシンボリックリンクに対する操作となります。
4
+
5
+ キーワード引数の `namespace` を与えると、拡張属性の名前空間を指定できます。
6
+
7
+ 与えられる値:
8
+
9
+ - `ExtAttr::USER`
10
+ - `ExtAttr::SYSTEM`
11
+ - `user` 又は `system` を文字列かシンボルで (大文字小文字は区別されない)
12
+ - `nil` (`ExtAttr::USER` と等価)
13
+
14
+ 規定値は `ExtAttr::USER` です。
15
+
16
+
17
+ ## モジュール `ExtAttr`
18
+
19
+ - `ExtAttr.list(path, namespace) -> array`
20
+ - `ExtAttr.list!(path, namespace) -> array`
21
+ - `ExtAttr.size(path, namespace, name) -> integer`
22
+ - `ExtAttr.size!(path, namespace, name) -> integer`
23
+ - `ExtAttr.get(path, namespace, name) -> string`
24
+ - `ExtAttr.get!(path, namespace, name) -> string`
25
+ - `ExtAttr.set(path, namespace, name, value) -> nil`
26
+ - `ExtAttr.set!(path, namespace, name, value) -> nil`
27
+ - `ExtAttr.delete(path, namespace, name) -> nil`
28
+ - `ExtAttr.delete!(path, namespace, name) -> nil`
29
+ - `ExtAttr.open(path) -> a ExtAttr::Accessor instance`
30
+ - `ExtAttr.open(path) { |ea| ... } -> returned value from yield block`
31
+ - `ExtAttr.each(path, namespace) -> an ExtAttr::Accessor instance`
32
+ - `ExtAttr.each(path, namespace = ExtAttr::USER) -> an enumerator instance`
33
+ - `ExtAttr.each(path, namespace = ExtAttr::USER) { |name, data| ... } -> path`
34
+ - `ExtAttr.each!(path, namespace = ExtAttr::USER) -> an enumerator instance`
35
+ - `ExtAttr.each!(path, namespace = ExtAttr::USER) { |name, data| ... } -> path`
36
+
37
+
38
+ ## クラス `ExtAttr::Accessor`
39
+
40
+ - `ExtAttr::Accessor#each(namespace: ExtAttr::USER) -> an enumerator instance`
41
+ - `ExtAttr::Accessor#each(namespace: ExtAttr::USER) { |name, data| ... } -> path`
42
+ - `ExtAttr::Accessor#list(namespace: ExtAttr::USER) -> array`
43
+ - `ExtAttr::Accessor#size(name, namespace: ExtAttr::USER) -> integer`
44
+ - `ExtAttr::Accessor#get(name, namespace: ExtAttr::USER) -> string`
45
+ - `ExtAttr::Accessor#set(name, data, namespace: ExtAttr::USER) -> nil`
46
+ - `ExtAttr::Accessor#delete(name, namespace: ExtAttr::USER) -> nil`
47
+
48
+
49
+ ## リファインメント `using ExtAttr`
50
+
51
+ リファインメント機能を使うことにより、`File` が拡張されます。
52
+
53
+ ### 拡張属性オブジェクトを生成する
54
+
55
+ ```ruby:ruby
56
+ File.extattr(path) -> an ExtAttr::Accessor instance
57
+ File#extattr -> an ExtAttr::Accessor instance
58
+ ```
59
+
60
+ ### 拡張属性の属性名を取得
61
+
62
+ ```ruby:ruby
63
+ File.extattr_list(path, namespace: ExtAttr::USER) -> array
64
+ File.extattr_list(path, namespace: ExtAttr::USER) { |name| ... } -> nil
65
+ File.extattr_list!(path, namespace: ExtAttr::USER) -> array
66
+ File.extattr_list!(path, namespace: ExtAttr::USER) { |name| ... } -> nil
67
+ File#extattr_list(namespace: ExtAttr::USER) -> array
68
+ File#extattr_list(namespace: ExtAttr::USER) { |name| ... } -> nil
69
+ ```
70
+
71
+ ### 拡張属性の要素の大きさを取得
72
+
73
+ ```ruby:ruby
74
+ File.extattr_size(path, name, namespace: ExtAttr::USER) -> size
75
+ File.extattr_size!(path, name, namespace: ExtAttr::USER) -> size
76
+ File#extattr_size(name, namespace: ExtAttr::USER) -> size
77
+ ```
78
+
79
+ ### 拡張属性の要素を取得
80
+
81
+ ```ruby:ruby
82
+ File.extattr_get(path, name, namespace: ExtAttr::USER) -> data (String)
83
+ File.extattr_get!(path, name, namespace: ExtAttr::USER) -> data (String)
84
+ File#extattr_get(name, namespace: ExtAttr::USER) -> data (String)
85
+ ```
86
+
87
+ ### 拡張属性の要素を設定
88
+
89
+ ```ruby:ruby
90
+ File.extattr_set(path, name, data, namespace: ExtAttr::USER) -> nil
91
+ File.extattr_set!(path, name, data, namespace: ExtAttr::USER) -> nil
92
+ File#extattr_set(name, data, namespace: ExtAttr::USER) -> nil
93
+ ```
94
+
95
+ ### 拡張属性の要素を削除
96
+
97
+ ```ruby:ruby
98
+ File.extattr_delete(path, name, namespace: ExtAttr::USER) -> nil
99
+ File.extattr_delete!(path, name, namespace: ExtAttr::USER) -> nil
100
+ File#extattr_delete(name, namespace: ExtAttr::USER) -> nil
101
+ ```
102
+
103
+ ### 拡張属性の属性名と要素を列挙する
104
+
105
+ ```ruby:ruby
106
+ File.extattr_each(path, namespace: ExtAttr::USER) -> Enumerator
107
+ File.extattr_each(path, namespace: ExtAttr::USER) { |name, data| ... } -> nil
108
+ File.extattr_each!(path, namespace: ExtAttr::USER) -> Enumerator
109
+ File.extattr_each!(path, namespace: ExtAttr::USER) { |name, data| ... } -> nil
110
+ File#extattr_each(namespace: ExtAttr::USER) -> Enumerator
111
+ File#extattr_each(namespace: ExtAttr::USER) { |name, data| ... } -> file
112
+ ```
data/README.md CHANGED
@@ -1,14 +1,9 @@
1
- # @markup markdown
1
+ # extattr - filesystem extended attributes manipurator for Ruby
2
2
 
3
- # extattr
3
+ extattr is filesystem extended attributes manipurator for Ruby on FreeBSD, GNU/Linux and Microsoft Windows.
4
4
 
5
- extattr is filesystem extended attributes operation library for FreeBSD, GNU/Linux and Microsoft Windows.
6
-
7
- ***END OF DOCUMENT IN ENGLISH***
8
-
9
- ----
10
-
11
- ***START OF DOCUMENT IN JAPANESE***
5
+ - [Quick Reference](QUICKREF.ja.md) (in Japanese)
6
+ - [HISTORY](HISTORY.ja.md) (in Japanese)
12
7
 
13
8
  extattr はファイルシステムの拡張属性を操作するライブラリで、FreeBSD、GNU/Linux、Windows に対応しています。
14
9
 
@@ -16,146 +11,74 @@ extattr はファイルシステムの拡張属性を操作するライブラリ
16
11
 
17
12
  実装については、以下のようになっています。
18
13
 
19
- - FreeBSD: extattr (`extattr_list`, `extattr_get`, `extattr_set`, `extattr_delete`)
20
- - GNU/Linux: xattr (`listxattr`, `getxattr`, `setxattr`, `removexattr`)
21
- - Microsoft Windows: NTFS ADS (代替データストリーム) / 拡張ファイル属性 (`NtQueryEaFile`, `NtSetEaFile`)
22
-
23
-
24
- ## Support ruby version
25
-
26
- - ruby-1.9.3+
27
- - ruby-2.0+
28
- - ruby-2.1+
14
+ * FreeBSD: extattr (`extattr_list`, `extattr_get`, `extattr_set`, `extattr_delete`)
15
+ * GNU/Linux: xattr (`listxattr`, `getxattr`, `setxattr`, `removexattr`)
16
+ * Microsoft Windows: NTFS ADS (代替データストリーム) / 拡張ファイル属性 (`NtQueryEaFile`, `NtSetEaFile`)
29
17
 
30
18
 
31
19
  ## Tested system
32
20
 
33
- - PC-BSD/AMD64 10.0
34
- - lubuntu 13.10 (i386)
35
- - Microsoft Windows XP Professional SP3
36
- - Microsoft Windows 7 Professional SP1
37
-
38
-
39
- ## 簡易リファレンスマニュアル
40
-
41
- クラスメソッドに『!』がついているものはシンボリックリンクに対する操作となります。
42
-
43
- キーワード引数の `namespace` を与えると、拡張属性の名前空間を指定できます。
44
-
45
- 規定値は `File::EXTATTR_NAMESPACE_USER` で、ほかの値は `File::EXTATTR_NAMESPACE_SYSTEM` のみが指定できます。
46
-
47
-
48
- ### 拡張属性の属性名を取得
49
-
50
- File.extattr_list(path, namespace: File::EXTATTR_NAMESPACE_USER) -> array
51
- File.extattr_list(path, namespace: File::EXTATTR_NAMESPACE_USER) { |name| ... } -> nil
52
- File.extattr_list!(path, namespace: File::EXTATTR_NAMESPACE_USER) -> array
53
- File.extattr_list!(path, namespace: File::EXTATTR_NAMESPACE_USER) { |name| ... } -> nil
54
- File#extattr_list(namespace: File::EXTATTR_NAMESPACE_USER) -> array
55
- File#extattr_list(namespace: File::EXTATTR_NAMESPACE_USER) { |name| ... } -> nil
56
-
57
- ### 拡張属性の要素の大きさを取得
58
-
59
- File.extattr_size(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> size
60
- File.extattr_size!(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> size
61
- File#extattr_size(name, namespace: File::EXTATTR_NAMESPACE_USER) -> size
62
-
63
- ### 拡張属性の要素を取得
64
-
65
- File.extattr_get(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> data (String)
66
- File.extattr_get!(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> data (String)
67
- File#extattr_get(name, namespace: File::EXTATTR_NAMESPACE_USER) -> data (String)
68
-
69
- ### 拡張属性の要素を設定
70
-
71
- File.extattr_set(path, name, data, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
72
- File.extattr_set!(path, name, data, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
73
- File#extattr_set(name, data, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
74
-
75
- ### 拡張属性の要素を削除
76
-
77
- File.extattr_delete(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
78
- File.extattr_delete!(path, name, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
79
- File#extattr_delete(name, namespace: File::EXTATTR_NAMESPACE_USER) -> nil
80
-
81
- ### 拡張属性の属性名と要素を列挙する
82
-
83
- File.extattr_each(path, namespace: File::EXTATTR_NAMESPACE_USER) -> Enumerator
84
- File.extattr_each(path, namespace: File::EXTATTR_NAMESPACE_USER) { |name, data| ... } -> nil
85
- File.extattr_each!(path, namespace: File::EXTATTR_NAMESPACE_USER) -> Enumerator
86
- File.extattr_each!(path, namespace: File::EXTATTR_NAMESPACE_USER) { |name, data| ... } -> nil
87
- File#extattr_each(namespace: File::EXTATTR_NAMESPACE_USER) -> Enumerator
88
- File#extattr_each(namespace: File::EXTATTR_NAMESPACE_USER) { |name, data| ... } -> file
21
+ * PC-BSD/AMD64 10.0
22
+ * lubuntu 13.10 (i386)
23
+ * Microsoft Windows XP Professional SP3
24
+ * Microsoft Windows 7 Professional SP1
89
25
 
90
26
 
91
27
  ## GNU/Linux における特記事項
92
28
 
93
- - GNU/Linux で利用されている名前空間〈security〉〈trusted〉には未対応です。
29
+ * GNU/Linux で利用されている名前空間〈security〉〈trusted〉には未対応です。
94
30
 
95
31
 
96
32
  ## Microsoft Windows における特記事項
97
33
 
98
- - Windows XP 以降を必要とします。Win2k でも動作するかもしれません (未検証)
99
- Windows 9x シリーズでは `require "extattr"` の段階で例外が発生すると思われます (未検証)。
100
- - `File::EXTATTR_NAMESPACE_USER` は (比較的よく利用される) NTFS ADS に対する操作で、`File::EXTATTR_NAMESPACE_SYSTEM` が本来の (あまり利用されていない) 拡張ファイル属性に対する操作となります。
101
- - リパースポイント (ジャンクションやシンボリックリンク) に対する NTFS ADS は要素の取得や設定、削除は出来ません。
102
- 必ずリンク先に対する操作となります (やり方がわかりません)。
103
- - 64 KiB を超える NTFS ADS は取得も設定も出来ません。
104
- これは『拡張属性』と捉えた場合、巨大なデータを扱えるべきではないという考えによるためです
105
- (本当のところは FreeBSD の拡張属性が最大 64KiB 弱であることが由来です)。
106
- - 巨大な NTFS ADS を扱いたい場合は、`File.open` でファイルとして扱えるので自由に読み書きできます。
107
- これは ruby に限ったことではなく、Windows による仕様です。
108
- この場合の与えるファイル名は、`path + ":" + name` という形になります。
109
-
110
- filepath = "sample.txt"
111
- extattrname = "category"
112
- ntfs_ads_name = filepath + ":" + extattrname
113
- File.open(ntfs_ads_name, "r") do |file|
114
- ...
115
- end
34
+ * Windows XP 以降を必要とします。Win2k でも動作するかもしれません (未検証)。<br>
35
+ Windows 9x シリーズでは `require "extattr"` の段階で例外が発生すると思われます (未検証)。
36
+ * ``ExtAttr::USER`` は (比較的よく利用される) NTFS ADS に対する操作で、``ExtAttr::SYSTEM`` が本来の (あまり利用されていない) 拡張ファイル属性に対する操作となります。
37
+ * リパースポイント (ジャンクションやシンボリックリンク) に対する NTFS ADS は要素の取得や設定、削除は出来ません。<br>
38
+ 必ずリンク先に対する操作となります (やり方がわかりません)。
39
+ * 64 KiB を超える NTFS ADS は取得も設定も出来ません。<br>
40
+ これは『拡張属性』と捉えた場合、巨大なデータを扱えるべきではないという考えによるためです
41
+ (本当のところは FreeBSD の拡張属性が最大 64KiB 弱であることが由来です)。
42
+ * 巨大な NTFS ADS を扱いたい場合は、``File.open`` でファイルとして扱えるので自由に読み書きできます。<br>
43
+ これは Ruby に限ったことではなく、Windows による仕様です。<br>
44
+ この場合の与えるファイル名は、``path + ":" + name`` という形になります。
45
+
46
+ ``` ruby:ruby
47
+ filepath = "sample.txt"
48
+ extattrname = "category"
49
+ ntfs_ads_name = filepath + ":" + extattrname
50
+ File.open(ntfs_ads_name, "r") do |file|
51
+ ...
52
+ end
53
+ ```
116
54
 
117
55
  ## 既知のバグ
118
56
 
119
- ### `extattr_list` のブロック内で `extattr_set` `extattr_delete` を行うと思いがけない副作用が起こる場合がある
120
-
121
- 解決方法: `extattr_set` か `extattr_delete` のどちらかを同時に利用したい場合、`extattr_list.each` を用いてください。
122
-
123
-
124
- ## 変更履歴
125
-
126
- ### 0.1
127
-
128
- はじめてのりりーす
129
-
130
- - 拡張ファイル属性の一覧、取得、設定、削除を行うことが出来ます
131
- - **セキュリティリスクあり**: `$SAFE` の確認や汚染状態の伝播を行ないません
132
- - Windows 版では、NTFS ADS に対する操作となります。`File::EXTATTR_NAMESPACE_USER` のみが有効です
133
-
134
- ### 0.2
57
+ * ``extattr_list`` のブロック内で ``extattr_set`` ``extattr_delete`` を行うと正確な列挙がされない場合がある
135
58
 
136
- - セーフレベルに関する改善
137
- - `$SAFE` と汚染状態を確認するようになりました
138
- - 汚染状態を伝播させるようになりました
139
- - バージョン情報と実装 API に関する情報の取得
140
- - `File::EXTATTR_VERSION` 定数によって、バージョン情報が取得できるようになりました
141
- - `File::EXTATTR_IMPLEMENT` 定数によって、実装に関する情報が取得できるようになりました
142
- - 機能の改善
143
- - `File.extattr_each` / `File#extattr_each` によって、ファイル拡張属性の名前と値を繰り返し取得できるようになりました
144
- - Windows 版に関する改善
145
- - `File::EXTATTR_NAMESPACE_SYSTEM` によって、本来の拡張ファイル属性の操作が行えるようになりました
146
- (NtQueryEaFile / NtSetEaFile)
59
+ 解決方法: ``extattr_set`` か ``extattr_delete`` のどちらかを同時に利用したい場合、``extattr_list.each`` を用いてください。
147
60
 
148
61
 
149
62
  ## 参考資料
150
63
 
151
- - extattr
152
- - <http://www.freebsd.org/cgi/man.cgi?query=extattr&sektion=2>
153
- - xattr
154
- - <http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/listxattr.2.html>
155
- - windows
156
- - <http://msdn.microsoft.com/en-us/library/cc232069.aspx>
157
- - <http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/File/FILE_INFORMATION_CLASS.html>
158
- - <http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/File/NtQueryInformationFile.html>
159
- - <http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/File/NtQueryEaFile.html>
160
- - <http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/File/NtSetEaFile.html>
161
- - <http://www.zezula.net/en/fstools/filetest.html>
64
+ * extattr
65
+ * <https://www.freebsd.org/cgi/man.cgi?query=extattr&sektion=2>
66
+ * xattr
67
+ * <https://linuxjm.osdn.jp/html/LDP_man-pages/man2/listxattr.2.html>
68
+ * windows
69
+ * <https://msdn.microsoft.com/en-us/library/cc232069.aspx>
70
+ * <https://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/File/FILE_INFORMATION_CLASS.html>
71
+ * <https://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/File/NtQueryInformationFile.html>
72
+ * <https://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/File/NtQueryEaFile.html>
73
+ * <https://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/File/NtSetEaFile.html>
74
+ * FileTest <http://www.zezula.net/en/fstools/filetest.html> <https://github.com/ladislav-zezula/FileTest>
75
+
76
+ ## Specification
77
+
78
+ - package name: [extattr](https://rubygems.org/gems/extattr)
79
+ - Author: dearblue
80
+ - Version: 0.4
81
+ - Product quality: technical preview
82
+ - License: [2-clause BSD License](LICENSE.md)
83
+ - Project page: <https://github.com/dearblue/ruby-extattr>
84
+ - Support Ruby: Ruby 2.5+