p4ruby 2014.2.0.pre2 → 2014.2.0.pre3

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
2
  SHA1:
3
- metadata.gz: 011c5842e9bcd42542f606ee3fba8d6c8d3ac0ad
4
- data.tar.gz: 351a3104d4c3f001da3a324b3fc332f5eeda7330
3
+ metadata.gz: 7d54de1eb7bb72644ffa5f247b42efda01c22783
4
+ data.tar.gz: 73b7022b99ad6a17f3b2737be1a38396514429f1
5
5
  SHA512:
6
- metadata.gz: 8ec0465665f9c152d81ca55dbc49faf73ff1bd2f3435e6af4be77b1294174b944c7d8752784571a0eae833328e86b0a0c1b86f8a2b3b38b80b8e87835cae4961
7
- data.tar.gz: 185136ac0ee80f5ee1b4b07105c7b275a13ad7687e6c39241b41ab2c733ac3a6316a8136be91e75a0972899e0630ef46092be0872188ce63df4a9ea252ce7380
6
+ metadata.gz: 5bbd0db7fa7bbe379a63e8c6b9c3522e6227c8c8c8e3a98166e90a6edb8ac9129e7aa6c625f4eb6bcee777dd6d4a058467e9db59685e77e1bb3ca20ba0744dbc
7
+ data.tar.gz: 7481faabf71db4ec9bbc860cbbf8b1c2ee37af08b534b7baa33f0ec17dd133ca66b52a892f2adc58bd9318fe7592aba3f292272fd6ee044a1cb98ef9b5e76c22
data/ext/P4/p4.cpp CHANGED
@@ -297,6 +297,23 @@ static VALUE p4_set_env( VALUE self, VALUE var, VALUE val )
297
297
  Data_Get_Struct( self, P4ClientApi, p4 );
298
298
  return p4->SetEnv( StringValuePtr( var ), StringValuePtr( val ) );
299
299
  }
300
+
301
+ static VALUE p4_get_enviro_file( VALUE self )
302
+ {
303
+ P4ClientApi *p4;
304
+ Data_Get_Struct( self, P4ClientApi, p4 );
305
+ const StrPtr *enviro_file = p4->GetEnviroFile();
306
+ return P4Utils::ruby_string( enviro_file->Text() );
307
+ }
308
+
309
+ static VALUE p4_set_enviro_file( VALUE self, VALUE rbstr )
310
+ {
311
+ P4ClientApi *p4;
312
+ Data_Get_Struct( self, P4ClientApi, p4 );
313
+ p4->SetEnviroFile( StringValuePtr(rbstr) );
314
+ return Qtrue;
315
+ }
316
+
300
317
  static VALUE p4_get_host( VALUE self )
301
318
  {
302
319
  P4ClientApi *p4;
@@ -1192,6 +1209,8 @@ void Init_P4()
1192
1209
  rb_define_method( cP4, "client=", RUBY_METHOD_FUNC(p4_set_client) , 1 );
1193
1210
  rb_define_method( cP4, "env", RUBY_METHOD_FUNC(p4_get_env) , 1 );
1194
1211
  rb_define_method( cP4, "set_env", RUBY_METHOD_FUNC(p4_set_env) , 2 );
1212
+ rb_define_method( cP4, "enviro_file", RUBY_METHOD_FUNC(p4_get_enviro_file), 0);
1213
+ rb_define_method( cP4, "enviro_file=", RUBY_METHOD_FUNC(p4_set_enviro_file), 1);
1195
1214
  rb_define_method( cP4, "host", RUBY_METHOD_FUNC(p4_get_host) , 0 );
1196
1215
  rb_define_method( cP4, "host=", RUBY_METHOD_FUNC(p4_set_host) , 1 );
1197
1216
  rb_define_method( cP4, "ignore_file",RUBY_METHOD_FUNC(p4_get_ignore) , 0 );
@@ -119,7 +119,18 @@ P4ClientApi::GetEnv( const char *v)
119
119
  {
120
120
  return enviro->Get( v );
121
121
  }
122
-
122
+
123
+ void
124
+ P4ClientApi::SetEnviroFile( const char *c )
125
+ {
126
+ enviro->SetEnviroFile(c);
127
+ }
128
+
129
+ const StrPtr *
130
+ P4ClientApi::GetEnviroFile()
131
+ {
132
+ return enviro->GetEnviroFile();
133
+ }
123
134
 
124
135
  void
125
136
  P4ClientApi::SetApiLevel( int level )
data/ext/P4/p4clientapi.h CHANGED
@@ -69,6 +69,7 @@ public:
69
69
 
70
70
  void SetClient( const char *c ) { client.SetClient( c ); }
71
71
  void SetCwd( const char *c );
72
+ void SetEnviroFile( const char *c );
72
73
  void SetHost( const char *h ) { client.SetHost( h ); }
73
74
  void SetIgnoreFile( const char *f ) { client.SetIgnoreFile( f ); }
74
75
  void SetMaxResults( int v ) { maxResults = v; }
@@ -90,6 +91,7 @@ public:
90
91
  const StrPtr &GetConfig() { return client.GetConfig(); }
91
92
  const StrPtr &GetCwd() { return client.GetCwd(); }
92
93
  const char * GetEnv( const char *v);
94
+ const StrPtr *GetEnviroFile();
93
95
  const StrPtr &GetHost() { return client.GetHost(); }
94
96
  const StrPtr &GetIgnoreFile() { return client.GetIgnoreFile();}
95
97
  const StrPtr &GetLanguage() { return client.GetLanguage(); }
data/ext/P4/specmgr.cpp CHANGED
@@ -26,12 +26,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
26
  *******************************************************************************/
27
27
 
28
28
  /*******************************************************************************
29
- * Name : specmgr.cc
29
+ * Name : specmgr.cc
30
30
  *
31
- * Description : Ruby bindings for the Perforce API. Class for handling
32
- * Perforce specs. This class provides other classes with
33
- * generic support for parsing and formatting Perforce
34
- * specs.
31
+ * Description : Ruby bindings for the Perforce API. Class for handling
32
+ * Perforce specs. This class provides other classes with
33
+ * generic support for parsing and formatting Perforce
34
+ * specs.
35
35
  *
36
36
  ******************************************************************************/
37
37
  #include <ctype.h>
@@ -52,179 +52,262 @@ struct defaultspec {
52
52
  const char *type;
53
53
  const char *spec;
54
54
  } speclist[] = {
55
-
56
55
  {
57
- "branch",
58
- "Branch;code:301;rq;ro;fmt:L;len:32;;"
59
- "Update;code:302;type:date;ro;fmt:L;len:20;;"
60
- "Access;code:303;type:date;ro;fmt:L;len:20;;"
61
- "Owner;code:304;fmt:R;len:32;;"
62
- "Description;code:306;type:text;len:128;;"
63
- "Options;code:309;type:line;len:32;val:"
64
- "unlocked/locked;;"
65
- "View;code:311;type:wlist;words:2;len:64;;"
56
+ "branch",
57
+ "Branch;code:301;rq;ro;fmt:L;len:32;;"
58
+ "Update;code:302;type:date;ro;fmt:L;len:20;;"
59
+ "Access;code:303;type:date;ro;fmt:L;len:20;;"
60
+ "Owner;code:304;fmt:R;len:32;;"
61
+ "Description;code:306;type:text;len:128;;"
62
+ "Options;code:309;type:line;len:32;val:"
63
+ "unlocked/locked;;"
64
+ "View;code:311;type:wlist;words:2;len:64;;"
65
+ },
66
+ {
67
+ "changeX",
68
+ "Change;code:201;rq;ro;fmt:L;seq:1;len:10;;"
69
+ "Date;code:202;type:date;ro;fmt:R;seq:3;len:20;;"
70
+ "Client;code:203;ro;fmt:L;seq:2;len:32;;"
71
+ "User;code:204;ro;fmt:L;seq:4;len:32;;"
72
+ "Status;code:205;ro;fmt:R;seq:5;len:10;;"
73
+ "Type;code:211;seq:6;type:select;fmt:L;len:10;"
74
+ "val:public/restricted;;"
75
+ "Description;code:206;type:text;rq;;"
76
+ "Jobs;code:209;type:wlist;words:2;len:32;;"
77
+ "Files;code:210;type:llist;len:64;;"
78
+ },
79
+ {
80
+ "change",
81
+ "Change;code:201;rq;ro;fmt:L;seq:1;len:10;;"
82
+ "Date;code:202;type:date;ro;fmt:R;seq:3;len:20;;"
83
+ "Client;code:203;ro;fmt:L;seq:2;len:32;;"
84
+ "User;code:204;ro;fmt:L;seq:4;len:32;;"
85
+ "Status;code:205;ro;fmt:R;seq:5;len:10;;"
86
+ "Type;code:211;seq:6;type:select;fmt:L;len:10;"
87
+ "val:public/restricted;;"
88
+ "Description;code:206;type:text;rq;seq:7;;"
89
+ "JobStatus;code:207;fmt:I;type:select;seq:9;;"
90
+ "Jobs;code:208;type:wlist;seq:8;len:32;;"
91
+ "Files;code:210;type:llist;len:64;;"
92
+ },
93
+ {
94
+ "client",
95
+ "Client;code:301;rq;ro;seq:1;len:32;;"
96
+ "Update;code:302;type:date;ro;seq:2;fmt:L;len:20;;"
97
+ "Access;code:303;type:date;ro;seq:4;fmt:L;len:20;;"
98
+ "Owner;code:304;seq:3;fmt:R;len:32;;"
99
+ "Host;code:305;seq:5;fmt:R;len:32;;"
100
+ "Description;code:306;type:text;len:128;;"
101
+ "Root;code:307;rq;type:line;len:64;;"
102
+ "AltRoots;code:308;type:llist;len:64;;"
103
+ "Options;code:309;type:line;len:64;val:"
104
+ "noallwrite/allwrite,noclobber/clobber,nocompress/compress,"
105
+ "unlocked/locked,nomodtime/modtime,normdir/rmdir;;"
106
+ "SubmitOptions;code:313;type:select;fmt:L;len:25;val:"
107
+ "submitunchanged/submitunchanged+reopen/revertunchanged/"
108
+ "revertunchanged+reopen/leaveunchanged/leaveunchanged+reopen;;"
109
+ "LineEnd;code:310;type:select;fmt:L;len:12;val:"
110
+ "local/unix/mac/win/share;;"
111
+ "Stream;code:314;type:line;len:64;;"
112
+ "StreamAtChange;code:316;type:line;len:64;;"
113
+ "ServerID;code:315;type:line;ro;len:64;;"
114
+ "View;code:311;type:wlist;words:2;len:64;;"
115
+ "ChangeView;code:317;type:llist;len:64;;"
116
+ },
117
+ {
118
+ "clientX",
119
+ "Client;code:301;rq;ro;seq:1;len:32;;"
120
+ "Update;code:302;type:date;ro;seq:2;fmt:L;len:20;;"
121
+ "Access;code:303;type:date;ro;seq:4;fmt:L;len:20;;"
122
+ "Owner;code:304;seq:3;fmt:R;len:32;;"
123
+ "Host;code:305;seq:5;fmt:R;len:32;;"
124
+ "Description;code:306;type:text;len:128;;"
125
+ "Root;code:307;rq;type:line;len:64;;"
126
+ "AltRoots;code:308;type:llist;len:64;;"
127
+ "Options;code:309;type:line;len:64;val:"
128
+ "noallwrite/allwrite,noclobber/clobber,nocompress/compress,"
129
+ "unlocked/locked,nomodtime/modtime,normdir/rmdir;;"
130
+ "SubmitOptions;code:313;type:select;fmt:L;len:25;val:"
131
+ "submitunchanged/submitunchanged+reopen/revertunchanged/"
132
+ "revertunchanged+reopen/leaveunchanged/leaveunchanged+reopen;;"
133
+ "LineEnd;code:310;type:select;fmt:L;len:12;val:"
134
+ "local/unix/mac/win/share;;"
135
+ "View;code:311;type:wlist;words:2;len:64;;"
136
+ },
137
+ {
138
+ "clientSpecing021",
139
+ "Client;code:301;rq;ro;len:32;;"
140
+ "Update;code:302;type:date;ro;len:20;;"
141
+ "Access;code:303;type:date;ro;len:20;;"
142
+ "Owner;code:304;len:32;;"
143
+ "Host;code:305;len:32;;"
144
+ "Description;code:306;type:text;len:128;;"
145
+ "Root;code:307;rq;type:line;len:64;;"
146
+ "AltRoots;code:308;type:text;len:64;;"
147
+ "Options;code:309;type:line;len:64;val:"
148
+ "noallwrite/allwrite,noclobber/clobber,nocompress/compress,"
149
+ "unlocked/locked,nomodtime/modtime,normdir/rmdir;;"
150
+ "LineEnd;code:310;type:select;len:12;val:local/unix/mac/win/share;;"
151
+ "View;code:311;type:wlist;words:2;len:64;;"
66
152
  },
67
153
  {
68
- "change",
69
- "Change;code:201;rq;ro;fmt:L;seq:1;len:10;;"
70
- "Date;code:202;type:date;ro;fmt:R;seq:3;len:20;;"
71
- "Client;code:203;ro;fmt:L;seq:2;len:32;;"
72
- "User;code:204;ro;fmt:L;seq:4;len:32;;"
73
- "Status;code:205;ro;fmt:R;seq:5;len:10;;"
74
- "Type;code:211;seq:6;type:select;fmt:L;len:10;"
75
- "val:public/restricted;;"
76
- "Description;code:206;type:text;rq;seq:7;;"
77
- "JobStatus;code:207;fmt:I;type:select;seq:9;;"
78
- "Jobs;code:208;type:wlist;seq:8;len:32;;"
79
- "Files;code:210;type:llist;len:64;;"
154
+ "depot",
155
+ "Depot;code:251;rq;ro;len:32;;"
156
+ "Owner;code:252;len:32;;"
157
+ "Date;code:253;type:date;ro;len:20;;"
158
+ "Description;code:254;type:text;len:128;;"
159
+ "Type;code:255;rq;len:10;;"
160
+ "Address;code:256;len:64;;"
161
+ "Suffix;code:258;len:64;;"
162
+ "Map;code:257;rq;len:64;;"
163
+ "SpecMap;code:259;type:wlist;len:64;;"
80
164
  },
81
165
  {
82
- "client",
83
- "Client;code:301;rq;ro;seq:1;len:32;;"
84
- "Update;code:302;type:date;ro;seq:2;fmt:L;len:20;;"
85
- "Access;code:303;type:date;ro;seq:4;fmt:L;len:20;;"
86
- "Owner;code:304;seq:3;fmt:R;len:32;;"
87
- "Host;code:305;seq:5;fmt:R;len:32;;"
88
- "Description;code:306;type:text;len:128;;"
89
- "Root;code:307;rq;type:line;len:64;;"
90
- "AltRoots;code:308;type:llist;len:64;;"
91
- "Options;code:309;type:line;len:64;val:"
92
- "noallwrite/allwrite,noclobber/clobber,nocompress/compress,"
93
- "unlocked/locked,nomodtime/modtime,normdir/rmdir;;"
94
- "SubmitOptions;code:313;type:select;fmt:L;len:25;val:"
95
- "submitunchanged/submitunchanged+reopen/revertunchanged/"
96
- "revertunchanged+reopen/leaveunchanged/leaveunchanged+reopen;;"
97
- "LineEnd;code:310;type:select;fmt:L;len:12;val:"
98
- "local/unix/mac/win/share;;"
99
- "Stream;code:314;type:line;len:64;;"
100
- "StreamAtChange;code:316;type:line;len:64;;"
101
- "ServerID;code:315;type:line;ro;len:64;;"
102
- "View;code:311;type:wlist;words:2;len:64;;"
103
- "ChangeView;code:317;type:llist;ro;len:64;;"
166
+ "group",
167
+ "Group;code:401;rq;ro;len:32;;"
168
+ "MaxResults;code:402;type:word;len:12;;"
169
+ "MaxScanRows;code:403;type:word;len:12;;"
170
+ "MaxLockTime;code:407;type:word;len:12;;"
171
+ "Timeout;code:406;type:word;len:12;;"
172
+ "PasswordTimeout;code:409;type:word;len:12;;"
173
+ "Subgroups;code:404;type:wlist;len:32;opt:default;;"
174
+ "Owners;code:408;type:wlist;len:32;opt:default;;"
175
+ "Users;code:405;type:wlist;len:32;opt:default;;"
104
176
  },
105
177
  {
106
- "depot",
107
- "Depot;code:251;rq;ro;len:32;;"
108
- "Owner;code:252;len:32;;"
109
- "Date;code:253;type:date;ro;len:20;;"
110
- "Description;code:254;type:text;len:128;;"
111
- "Type;code:255;rq;len:10;;"
112
- "Address;code:256;len:64;;"
113
- "Suffix;code:258;len:64;;"
114
- "Map;code:257;rq;len:64;;"
115
- "SpecMap;code:259;type:wlist;len:64;;"
178
+ "job",
179
+ "Job;code:101;rq;len:32;;"
180
+ "Status;code:102;type:select;rq;len:10;"
181
+ "pre:open;val:open/suspended/closed;;"
182
+ "User;code:103;rq;len:32;pre:$user;;"
183
+ "Date;code:104;type:date;ro;len:20;pre:$now;;"
184
+ "Description;code:105;type:text;rq;pre:$blank;;"
116
185
  },
117
186
  {
118
- "group",
119
- "Group;code:401;rq;ro;len:32;;"
120
- "MaxResults;code:402;type:word;len:12;;"
121
- "MaxScanRows;code:403;type:word;len:12;;"
122
- "MaxLockTime;code:407;type:word;len:12;;"
123
- "Timeout;code:406;type:word;len:12;;"
124
- "PasswordTimeout;code:409;type:word;len:12;;"
125
- "Subgroups;code:404;type:wlist;len:32;opt:default;;"
126
- "Owners;code:408;type:wlist;len:32;opt:default;;"
127
- "Users;code:405;type:wlist;len:32;opt:default;;"
187
+ "label",
188
+ "Label;code:301;rq;ro;fmt:L;len:32;;"
189
+ "Update;code:302;type:date;ro;fmt:L;len:20;;"
190
+ "Access;code:303;type:date;ro;fmt:L;len:20;;"
191
+ "Owner;code:304;fmt:R;len:32;;"
192
+ "Description;code:306;type:text;len:128;;"
193
+ "Options;code:309;type:line;len:64;val:"
194
+ "unlocked/locked,noautoreload/autoreload;;"
195
+ "Revision;code:312;type:word;words:1;len:64;;"
196
+ "ServerID;code:315;type:line;ro;len:64;;"
197
+ "View;code:311;type:wlist;len:64;;"
128
198
  },
129
199
  {
130
- "job",
131
- "Job;code:101;rq;len:32;;"
132
- "Status;code:102;type:select;rq;len:10;"
133
- "pre:open;val:open/suspended/closed;;"
134
- "User;code:103;rq;len:32;pre:$user;;"
135
- "Date;code:104;type:date;ro;len:20;pre:$now;;"
136
- "Description;code:105;type:text;rq;pre:$blank;;"
200
+ "ldap",
201
+ "Name;code:801;rq;len:32;;"
202
+ "Host;code:802;rq;type:word;words:1;len:128;;"
203
+ "Port;code:803;rq;type:word;words:1;len:5;;"
204
+ "Encryption;code:804;rq;len:10;val:"
205
+ "none/ssl/tls;;"
206
+ "BindMethod;code:805;rq;len:10;val:"
207
+ "simple/search/sasl;;"
208
+ "SimplePattern;code:806;type:line;len:128;;"
209
+ "SearchBaseDN;code:807;type:line;len:128;;"
210
+ "SearchFilter;code:808;type:line;len:128;;"
211
+ "SearchScope;code:809;len:10;val:"
212
+ "baseonly/children/subtree;;"
213
+ "SearchBindDN;code:810;type:line;len:128;;"
214
+ "SearchPasswd;code:811;type:line;len:128;;"
215
+ "SaslRealm;code:812;type:word;words:1;len:128;;"
216
+ "GroupBaseDN;code:813;type:line;len:128;;"
217
+ "GroupSearchFilter;code:814;type:line;len:128;;"
218
+ "GroupSearchScope;code:815;len:10;val:"
219
+ "baseonly/children/subtree;;"
137
220
  },
138
221
  {
139
- "label",
140
- "Label;code:301;rq;ro;fmt:L;len:32;;"
141
- "Update;code:302;type:date;ro;fmt:L;len:20;;"
142
- "Access;code:303;type:date;ro;fmt:L;len:20;;"
143
- "Owner;code:304;fmt:R;len:32;;"
144
- "Description;code:306;type:text;len:128;;"
145
- "Options;code:309;type:line;len:64;val:"
146
- "unlocked/locked,noautoreload/autoreload;;"
147
- "Revision;code:312;type:word;words:1;len:64;;"
148
- "ServerID;code:315;type:line;ro;len:64;;"
149
- "View;code:311;type:wlist;len:64;;"
222
+ "license",
223
+ "License;code:451;len:32;;"
224
+ "License-Expires;code:452;len:10;;"
225
+ "Support-Expires;code:453;len:10;;"
226
+ "Customer;code:454;type:line;len:128;;"
227
+ "Application;code:455;len:32;;"
228
+ "IPaddress;code:456;len:24;;"
229
+ "IPservice;code:461;type:wlist;len:24;;"
230
+ "Platform;code:457;len:32;;"
231
+ "Clients;code:458;len:8;;"
232
+ "Users;code:459;len:8;;"
233
+ "Files;code:460;len:8;;"
150
234
  },
151
235
  {
152
- "license",
153
- "License;code:451;len:32;;"
154
- "License-Expires;code:452;len:10;;"
155
- "Support-Expires;code:453;len:10;;"
156
- "Customer;code:454;type:line;len:128;;"
157
- "Application;code:455;len:32;;"
158
- "IPaddress;code:456;len:24;;"
159
- "IPservice;code:461;type:wlist;len:24;;"
160
- "Platform;code:457;len:32;;"
161
- "Clients;code:458;len:8;;"
162
- "Users;code:459;len:8;;"
163
- "Files;code:460;len:8;;"
236
+ "protect",
237
+ "Protections;code:501;type:wlist;words:5;opt:default;len:64;;"
164
238
  },
165
239
  {
166
- "protect",
167
- "Protections;code:501;type:wlist;words:5;opt:default;len:64;;"
240
+ "specW",
241
+ "Fields;code:351;type:wlist;words:5;rq;;"
242
+ "Required;code:357;type:wlist;;"
243
+ "Readonly;code:358;type:wlist;;"
244
+ "Words;code:352;type:wlist;words:2;;"
245
+ "Formats;code:353;type:wlist;words:3;;"
246
+ "Values;code:354;type:wlist;words:2;;"
247
+ "Presets;code:355;type:wlist;words:2;;"
248
+ "Comments;code:356;type:text;;"
168
249
  },
169
250
  {
170
- "spec",
171
- "Fields;code:351;type:wlist;words:5;rq;;"
172
- "Words;code:352;type:wlist;words:2;;"
173
- "Formats;code:353;type:wlist;words:3;;"
174
- "Values;code:354;type:wlist;words:2;;"
175
- "Presets;code:355;type:wlist;words:2;;"
176
- "Comments;code:356;type:text;;"
251
+ "spec",
252
+ "Fields;code:351;type:wlist;words:5;rq;;"
253
+ "Words;code:352;type:wlist;words:2;;"
254
+ "Formats;code:353;type:wlist;words:3;;"
255
+ "Values;code:354;type:wlist;words:2;;"
256
+ "Presets;code:355;type:wlist;words:2;;"
257
+ "Comments;code:356;type:text;;"
177
258
  },
178
259
  {
179
- "stream",
180
- "Stream;code:701;rq;ro;len:64;;"
181
- "Update;code:705;type:date;ro;fmt:L;len:20;;"
182
- "Access;code:706;type:date;ro;fmt:L;len:20;;"
183
- "Owner;code:704;len:32;;"
184
- "Name;code:703;rq;type:line;len:32;;"
185
- "Parent;code:702;rq;len:64;;"
186
- "Type;code:708;rq;len:32;;"
187
- "Description;code:709;type:text;len:128;;"
188
- "Options;code:707;type:line;len:64;val:"
189
- "allsubmit/ownersubmit,unlocked/locked,"
190
- "toparent/notoparent,fromparent/nofromparent;;"
191
- "Paths;code:710;rq;type:wlist;words:2;maxwords:3;len:64;;"
192
- "Remapped;code:711;type:wlist;words:2;len:64;;"
193
- "Ignored;code:712;type:wlist;words:1;len:64;;"
194
- "View;code:713;type:wlist;words:2;len:64;;"
195
- "ChangeView;code:714;type:llist;ro;len:64;;"
260
+ "stream",
261
+ "Stream;code:701;rq;ro;len:64;;"
262
+ "Update;code:705;type:date;ro;fmt:L;len:20;;"
263
+ "Access;code:706;type:date;ro;fmt:L;len:20;;"
264
+ "Owner;code:704;len:32;;"
265
+ "Name;code:703;rq;type:line;len:32;;"
266
+ "Parent;code:702;rq;len:64;;"
267
+ "Type;code:708;rq;len:32;;"
268
+ "Description;code:709;type:text;len:128;;"
269
+ "Options;code:707;type:line;len:64;val:"
270
+ "allsubmit/ownersubmit,unlocked/locked,"
271
+ "toparent/notoparent,fromparent/nofromparent;;"
272
+ "Paths;code:710;rq;type:wlist;words:2;maxwords:3;len:64;;"
273
+ "Remapped;code:711;type:wlist;words:2;len:64;;"
274
+ "Ignored;code:712;type:wlist;words:1;len:64;;"
275
+ "View;code:713;type:wlist;words:2;len:64;;"
276
+ "ChangeView;code:714;type:llist;ro;len:64;;"
196
277
  },
197
278
  {
198
- "triggers",
199
- "Triggers;code:551;type:wlist;words:4;len:64;opt:default;"
279
+ "triggers",
280
+ "Triggers;code:551;type:wlist;words:4;len:64;opt:default;"
200
281
  },
201
282
  {
202
- "typemap",
203
- "TypeMap;code:601;type:wlist;words:2;len:64;opt:default;"
283
+ "typemap",
284
+ "TypeMap;code:601;type:wlist;words:2;len:64;opt:default;"
204
285
  },
205
286
  {
206
- "user",
207
- "User;code:651;rq;ro;seq:1;len:32;;"
208
- "Type;code:659;ro;fmt:R;len:10;;"
209
- "Email;code:652;fmt:R;rq;seq:3;len:32;;"
210
- "Update;code:653;fmt:L;type:date;ro;seq:2;len:20;;"
211
- "Access;code:654;fmt:L;type:date;ro;len:20;;"
212
- "FullName;code:655;fmt:R;type:line;rq;len:32;;"
213
- "JobView;code:656;type:line;len:64;;"
214
- "Password;code:657;len:32;;"
215
- "Reviews;code:658;type:wlist;len:64;;"
287
+ "user",
288
+ "User;code:651;rq;ro;seq:1;len:32;;"
289
+ "Type;code:659;ro;fmt:R;len:10;;"
290
+ "Email;code:652;fmt:R;rq;seq:3;len:32;;"
291
+ "Update;code:653;fmt:L;type:date;ro;seq:2;len:20;;"
292
+ "Access;code:654;fmt:L;type:date;ro;len:20;;"
293
+ "FullName;code:655;fmt:R;type:line;rq;len:32;;"
294
+ "JobView;code:656;type:line;len:64;;"
295
+ "Password;code:657;len:32;;"
296
+ "AuthMethod;code:662;fmt:L;len:10;val:perforce/ldap;;"
297
+ "Reviews;code:658;type:wlist;len:64;;"
216
298
  },
217
299
  {
218
- "server",
219
- "ServerID;code:751;rq;ro;len:32;;"
220
- "Type;code:752;rq;len:32;;"
221
- "Name;code:753;type:line;len:32;;"
222
- "Address;code:754;type:line;len:32;;"
223
- "Services;code:755;rq;len:128;;"
224
- "Description;code:756;type:text;len:128;;"
225
- "ClientDataFilter;code:757;type:wlist;len:64;;"
226
- "RevisionDataFilter;code:758;type:wlist;len:64;;"
227
- "ArchiveDataFilter;code:759;type:wlist;len:64;;"
300
+ "server",
301
+ "ServerID;code:751;rq;ro;len:32;;"
302
+ "Type;code:752;rq;len:32;;"
303
+ "Name;code:753;type:line;len:32;;"
304
+ "Address;code:754;type:line;len:32;;"
305
+ "Services;code:755;rq;len:128;;"
306
+ "Description;code:756;type:text;len:128;;"
307
+ "User;code:760;type:line;len:64;;"
308
+ "ClientDataFilter;code:757;type:wlist;len:64;;"
309
+ "RevisionDataFilter;code:758;type:wlist;len:64;;"
310
+ "ArchiveDataFilter;code:759;type:wlist;len:64;;"
228
311
  },
229
312
  { 0, 0 }
230
313
  };
@@ -245,7 +328,7 @@ void
245
328
  SpecMgr::AddSpecDef( const char *type, StrPtr &specDef )
246
329
  {
247
330
  if( specs->GetVar( type ) )
248
- specs->RemoveVar( type );
331
+ specs->RemoveVar( type );
249
332
  specs->SetVar( type, specDef );
250
333
  }
251
334
 
@@ -253,7 +336,7 @@ void
253
336
  SpecMgr::AddSpecDef( const char *type, const char *specDef )
254
337
  {
255
338
  if( specs->GetVar( type ) )
256
- specs->RemoveVar( type );
339
+ specs->RemoveVar( type );
257
340
  specs->SetVar( type, specDef );
258
341
  }
259
342
 
@@ -265,7 +348,7 @@ SpecMgr::Reset()
265
348
  specs = new StrBufDict;
266
349
 
267
350
  for( struct defaultspec *sp = &speclist[ 0 ]; sp->type; sp++ )
268
- AddSpecDef( sp->type, sp->spec );
351
+ AddSpecDef( sp->type, sp->spec );
269
352
 
270
353
  }
271
354
 
@@ -276,25 +359,25 @@ SpecMgr::HaveSpecDef( const char *type )
276
359
  }
277
360
 
278
361
  //
279
- // Convert a Perforce StrDict into a Ruby hash. Convert multi-level
280
- // data (Files0, Files1 etc. ) into (nested) array members of the hash.
362
+ // Convert a Perforce StrDict into a Ruby hash. Convert multi-level
363
+ // data (Files0, Files1 etc. ) into (nested) array members of the hash.
281
364
  //
282
365
 
283
366
  VALUE
284
367
  SpecMgr::StrDictToHash( StrDict *dict, VALUE hash )
285
368
  {
286
- StrRef var, val;
287
- int i;
369
+ StrRef var, val;
370
+ int i;
288
371
 
289
372
  if( hash == Qnil )
290
- hash = rb_hash_new();
373
+ hash = rb_hash_new();
291
374
 
292
375
  for ( i = 0; dict->GetVar( i, var, val ); i++ )
293
376
  {
294
- if ( var == "specdef" || var == "func" || var == "specFormatted" )
295
- continue;
377
+ if ( var == "specdef" || var == "func" || var == "specFormatted" )
378
+ continue;
296
379
 
297
- InsertItem( hash, &var, &val );
380
+ InsertItem( hash, &var, &val );
298
381
  }
299
382
  return hash;
300
383
  }
@@ -307,17 +390,17 @@ VALUE
307
390
  SpecMgr::StrDictToSpec( StrDict *dict, StrPtr *specDef )
308
391
  {
309
392
 
310
- // This converts it to a string, and then to a hash, so we go from one
393
+ // This converts it to a string, and then to a hash, so we go from one
311
394
  // type of dictionary to another, via an intermediate form (a StrBuf).
312
395
 
313
- Error e;
314
- SpecDataTable dictData( dict );
396
+ Error e;
397
+ SpecDataTable dictData( dict );
315
398
  #if P4APIVER_ID >= 513538
316
- Spec s( specDef->Text(), "", &e );
399
+ Spec s( specDef->Text(), "", &e );
317
400
  #else
318
- Spec s( specDef->Text(), "" );
401
+ Spec s( specDef->Text(), "" );
319
402
  #endif
320
- StrBuf form;
403
+ StrBuf form;
321
404
 
322
405
  if( e.Test() ) return Qfalse;
323
406
 
@@ -325,12 +408,12 @@ SpecMgr::StrDictToSpec( StrDict *dict, StrPtr *specDef )
325
408
  s.Format( &dictData, &form );
326
409
 
327
410
  // Now parse the StrBuf into a new P4::Spec object
328
- VALUE spec = NewSpec( specDef );
329
- SpecDataRuby hashData( spec );
411
+ VALUE spec = NewSpec( specDef );
412
+ SpecDataRuby hashData( spec );
330
413
 
331
414
  s.ParseNoValid( form.Text(), &hashData, &e );
332
415
  if( e.Test() ) return Qfalse;
333
-
416
+
334
417
  // Now see if there are any extraTag fields as we'll need to
335
418
  // add those fields into our output. Just iterate over them
336
419
  // extracting the fields and inserting them as we go.
@@ -339,16 +422,16 @@ SpecMgr::StrDictToSpec( StrDict *dict, StrPtr *specDef )
339
422
  for( i = 0; ; i++ )
340
423
  {
341
424
  StrBuf tag;
342
- StrPtr *var;
343
- StrPtr *val;
425
+ StrPtr *var;
426
+ StrPtr *val;
344
427
 
345
428
  tag << et << i;
346
- if( !(var = dict->GetVar( tag ) ) )
429
+ if( !(var = dict->GetVar( tag ) ) )
347
430
  break;
348
431
 
349
- val = dict->GetVar( *var );
350
- if( !val ) continue;
351
-
432
+ val = dict->GetVar( *var );
433
+ if( !val ) continue;
434
+
352
435
  InsertItem( spec, var, val );
353
436
  }
354
437
 
@@ -358,48 +441,48 @@ SpecMgr::StrDictToSpec( StrDict *dict, StrPtr *specDef )
358
441
  VALUE
359
442
  SpecMgr::StringToSpec( const char *type, const char *form, Error *e )
360
443
  {
361
-
362
- StrPtr * specDef = specs->GetVar( type );
363
- VALUE hash = NewSpec( specDef );
364
- SpecDataRuby specData( hash );
444
+
445
+ StrPtr * specDef = specs->GetVar( type );
446
+ VALUE hash = NewSpec( specDef );
447
+ SpecDataRuby specData( hash );
365
448
  #if P4APIVER_ID >= 513538
366
- Spec s( specDef->Text(), "", e );
449
+ Spec s( specDef->Text(), "", e );
367
450
  #else
368
- Spec s( specDef->Text(), "" );
451
+ Spec s( specDef->Text(), "" );
369
452
  #endif
370
453
 
371
- if( !e->Test() )
372
- s.ParseNoValid( form, &specData, e );
454
+ if( !e->Test() )
455
+ s.ParseNoValid( form, &specData, e );
373
456
 
374
457
  if ( e->Test() )
375
- return Qfalse;
458
+ return Qfalse;
376
459
 
377
460
  return hash;
378
461
  }
379
462
 
380
463
 
381
464
  //
382
- // Format routine. updates a StrBuf object with the form content.
465
+ // Format routine. updates a StrBuf object with the form content.
383
466
  // The StrBuf can then be converted to a Ruby string where required.
384
467
  //
385
468
  void
386
469
  SpecMgr::SpecToString( const char *type, VALUE hash, StrBuf &b, Error *e )
387
470
  {
388
471
 
389
- StrBuf buf;
390
- StrPtr * specDef = specs->GetVar( type );
472
+ StrBuf buf;
473
+ StrPtr * specDef = specs->GetVar( type );
391
474
  if ( !specDef )
392
475
  {
393
- e->Set( E_FAILED, "No specdef available. Cannot convert hash to a "
394
- "Perforce form" );
395
- return;
476
+ e->Set( E_FAILED, "No specdef available. Cannot convert hash to a "
477
+ "Perforce form" );
478
+ return;
396
479
  }
397
480
 
398
- SpecDataRuby specData( hash );
481
+ SpecDataRuby specData( hash );
399
482
  #if P4APIVER_ID >= 513538
400
- Spec s( specDef->Text(), "", e );
483
+ Spec s( specDef->Text(), "", e );
401
484
  #else
402
- Spec s( specDef->Text(), "" );
485
+ Spec s( specDef->Text(), "" );
403
486
  #endif
404
487
 
405
488
  if( e->Test() ) return;
@@ -431,29 +514,29 @@ SpecMgr::SpecFields( StrPtr *specDef )
431
514
  // see that changing anytime soon, and it makes this so simple and
432
515
  // reliable. So...
433
516
  //
434
- VALUE hash = rb_hash_new();
435
- Error e;
517
+ VALUE hash = rb_hash_new();
518
+ Error e;
436
519
 
437
520
  #if P4APIVER_ID >= 513538
438
- Spec s( specDef->Text(), "", &e );
521
+ Spec s( specDef->Text(), "", &e );
439
522
  #else
440
- Spec s( specDef->Text(), "" );
523
+ Spec s( specDef->Text(), "" );
441
524
  #endif
442
525
  if( e.Test() ) return Qnil;
443
526
 
444
527
  for( int i = 0; i < s.Count(); i++ )
445
528
  {
446
- StrBuf k;
447
- StrBuf v;
448
- SpecElem * se = s.Get( i );
529
+ StrBuf k;
530
+ StrBuf v;
531
+ SpecElem * se = s.Get( i );
449
532
 
450
- v = se->tag;
451
- k = v;
452
- StrOps::Lower( k );
533
+ v = se->tag;
534
+ k = v;
535
+ StrOps::Lower( k );
453
536
 
454
- rb_hash_aset(hash,
455
- P4Utils::ruby_string( k.Text(), k.Length() ),
456
- P4Utils::ruby_string( v.Text(), v.Length() ) );
537
+ rb_hash_aset(hash,
538
+ P4Utils::ruby_string( k.Text(), k.Length() ),
539
+ P4Utils::ruby_string( v.Text(), v.Length() ) );
457
540
  }
458
541
  return hash;
459
542
  }
@@ -474,13 +557,13 @@ SpecMgr::SplitKey( const StrPtr *key, StrBuf &base, StrBuf &index )
474
557
  index = "";
475
558
  for ( i = key->Length(); i; i-- )
476
559
  {
477
- char prev = (*key)[ i-1 ];
478
- if ( !isdigit( prev ) && prev != ',' )
479
- {
480
- base.Set( key->Text(), i );
481
- index.Set( key->Text() + i );
482
- break;
483
- }
560
+ char prev = (*key)[ i-1 ];
561
+ if ( !isdigit( prev ) && prev != ',' )
562
+ {
563
+ base.Set( key->Text(), i );
564
+ index.Set( key->Text() + i );
565
+ break;
566
+ }
484
567
  }
485
568
  }
486
569
 
@@ -492,16 +575,16 @@ SpecMgr::SplitKey( const StrPtr *key, StrBuf &base, StrBuf &index )
492
575
  void
493
576
  SpecMgr::InsertItem( VALUE hash, const StrPtr *var, const StrPtr *val )
494
577
  {
495
- VALUE ary = 0;
496
- VALUE tary = 0;
497
- VALUE key;
498
- ID idLength = rb_intern( "length" );
499
- StrBuf base, index;
500
- StrRef comma( "," );
578
+ VALUE ary = 0;
579
+ VALUE tary = 0;
580
+ VALUE key;
581
+ ID idLength = rb_intern( "length" );
582
+ StrBuf base, index;
583
+ StrRef comma( "," );
501
584
 
502
585
  SplitKey( var, base, index );
503
586
 
504
- // If there's no index, then we insert into the top level hash
587
+ // If there's no index, then we insert into the top level hash
505
588
  // but if the key is already defined then we need to rename the key. This
506
589
  // is probably one of those special keys like otherOpen which can be
507
590
  // both an array element and a scalar. The scalar comes last, so we
@@ -509,18 +592,18 @@ SpecMgr::InsertItem( VALUE hash, const StrPtr *var, const StrPtr *val )
509
592
  // value
510
593
  if ( index == "" )
511
594
  {
512
- ID idHasKey = rb_intern( "has_key?");
513
- ID idPlus = rb_intern( "+" );
514
-
515
- key = P4Utils::ruby_string( var->Text() );
516
- if ( rb_funcall( hash, idHasKey, 1, key ) == Qtrue )
517
- key = rb_funcall( key, idPlus, 1, P4Utils::ruby_string( "s" ) );
518
-
519
- if( P4RDB_DATA )
520
- fprintf( stderr, "... %s -> %s\n", StringValuePtr( key ), val->Text() );
521
-
522
- rb_hash_aset( hash, key, P4Utils::ruby_string( val->Text() ) );
523
- return;
595
+ ID idHasKey = rb_intern( "has_key?");
596
+ ID idPlus = rb_intern( "+" );
597
+
598
+ key = P4Utils::ruby_string( var->Text() );
599
+ if ( rb_funcall( hash, idHasKey, 1, key ) == Qtrue )
600
+ key = rb_funcall( key, idPlus, 1, P4Utils::ruby_string( "s" ) );
601
+
602
+ if( P4RDB_DATA )
603
+ fprintf( stderr, "... %s -> %s\n", StringValuePtr( key ), val->Text() );
604
+
605
+ rb_hash_aset( hash, key, P4Utils::ruby_string( val->Text() ) );
606
+ return;
524
607
  }
525
608
 
526
609
  //
@@ -531,57 +614,57 @@ SpecMgr::InsertItem( VALUE hash, const StrPtr *var, const StrPtr *val )
531
614
 
532
615
  if ( Qnil == ary )
533
616
  {
534
- ary = rb_ary_new();
535
- rb_hash_aset( hash, key, ary );
617
+ ary = rb_ary_new();
618
+ rb_hash_aset( hash, key, ary );
536
619
  }
537
620
  else if( rb_obj_is_kind_of( ary, rb_cArray ) != Qtrue )
538
621
  {
539
- //
540
- // There's an index in our var name, but the name is already defined
541
- // and the value it contains is not an array. This means we've got a
542
- // name collision. This can happen in 'p4 diff2' for example, when
543
- // one file gets 'depotFile' and the other gets 'depotFile2'. In
544
- // these cases it makes sense to keep the structure flat so we
545
- // just use the raw variable name.
546
- //
547
- if( P4RDB_DATA )
548
- fprintf( stderr, "... %s -> %s\n", var->Text(), val->Text() );
549
-
550
- rb_hash_aset( hash, P4Utils::ruby_string( var->Text() ) ,
551
- P4Utils::ruby_string( val->Text() ) );
552
- return;
622
+ //
623
+ // There's an index in our var name, but the name is already defined
624
+ // and the value it contains is not an array. This means we've got a
625
+ // name collision. This can happen in 'p4 diff2' for example, when
626
+ // one file gets 'depotFile' and the other gets 'depotFile2'. In
627
+ // these cases it makes sense to keep the structure flat so we
628
+ // just use the raw variable name.
629
+ //
630
+ if( P4RDB_DATA )
631
+ fprintf( stderr, "... %s -> %s\n", var->Text(), val->Text() );
632
+
633
+ rb_hash_aset( hash, P4Utils::ruby_string( var->Text() ) ,
634
+ P4Utils::ruby_string( val->Text() ) );
635
+ return;
553
636
  }
554
637
 
555
638
  // The index may be a simple digit, or it could be a comma separated
556
639
  // list of digits. For each "level" in the index, we need a containing
557
640
  // array.
558
641
  if( P4RDB_DATA )
559
- fprintf( stderr, "... %s -> [", base.Text() );
642
+ fprintf( stderr, "... %s -> [", base.Text() );
560
643
 
561
644
  for( const char *c = 0 ; ( c = index.Contains( comma ) ); )
562
645
  {
563
- StrBuf level;
564
- level.Set( index.Text(), c - index.Text() );
565
- index.Set( c + 1 );
566
-
567
- // Found another level so we need to get/create a nested array
568
- // under the current entry. We use the level as an index so that
569
- // missing entries are left empty deliberately.
570
-
571
- tary = rb_ary_entry( ary, level.Atoi() );
572
- if ( ! RTEST( tary ) )
646
+ StrBuf level;
647
+ level.Set( index.Text(), c - index.Text() );
648
+ index.Set( c + 1 );
649
+
650
+ // Found another level so we need to get/create a nested array
651
+ // under the current entry. We use the level as an index so that
652
+ // missing entries are left empty deliberately.
653
+
654
+ tary = rb_ary_entry( ary, level.Atoi() );
655
+ if ( ! RTEST( tary ) )
573
656
  {
574
- tary = rb_ary_new();
575
- rb_ary_store( ary, level.Atoi(), tary );
576
- }
577
- if( P4RDB_DATA )
578
- fprintf( stderr, "%s][", level.Text() );
579
- ary = tary;
657
+ tary = rb_ary_new();
658
+ rb_ary_store( ary, level.Atoi(), tary );
659
+ }
660
+ if( P4RDB_DATA )
661
+ fprintf( stderr, "%s][", level.Text() );
662
+ ary = tary;
580
663
  }
581
664
  int pos = index.Atoi();
582
665
 
583
666
  if( P4RDB_DATA )
584
- fprintf( stderr, "%d] = %s\n", pos, val->Text() );
667
+ fprintf( stderr, "%d] = %s\n", pos, val->Text() );
585
668
 
586
669
  rb_ary_store( ary, pos, P4Utils::ruby_string( val->Text() ) );
587
670
  }
@@ -593,12 +676,12 @@ SpecMgr::InsertItem( VALUE hash, const StrPtr *var, const StrPtr *val )
593
676
  VALUE
594
677
  SpecMgr::NewSpec( StrPtr *specDef )
595
678
  {
596
- ID idNew = rb_intern( "new" );
597
- ID idP4 = rb_intern( "P4" );
598
- ID idP4Spec = rb_intern( "Spec" );
599
- VALUE cP4 = rb_const_get_at( rb_cObject, idP4 );
600
- VALUE cP4Spec = rb_const_get_at( cP4, idP4Spec );
601
- VALUE fields = SpecFields( specDef );
679
+ ID idNew = rb_intern( "new" );
680
+ ID idP4 = rb_intern( "P4" );
681
+ ID idP4Spec = rb_intern( "Spec" );
682
+ VALUE cP4 = rb_const_get_at( rb_cObject, idP4 );
683
+ VALUE cP4Spec = rb_const_get_at( cP4, idP4Spec );
684
+ VALUE fields = SpecFields( specDef );
602
685
 
603
686
  return rb_funcall( cP4Spec, idNew, 1, fields );
604
687
  }
data/lib/P4.rb CHANGED
@@ -35,9 +35,17 @@
35
35
  require_relative 'P4/version'
36
36
 
37
37
  #
38
- # Get the bulk of the definition of the P4 class from the API interface
38
+ # Get the bulk of the definition of the P4 class from the API interface.
39
39
  #
40
- require 'P4.so'
40
+ # If this is our precompiled gem, the shared library will lie underneath a
41
+ # a version specific folder.
42
+ #
43
+ begin
44
+ RUBY_VERSION =~ /(\d+\.\d+)/
45
+ require "#{$1}/P4.so"
46
+ rescue LoadError
47
+ require 'P4.so'
48
+ end
41
49
 
42
50
  #
43
51
  # Add the extra's written purely in ruby.
data/lib/P4/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class P4
2
- Version = VERSION = '2014.2.0.pre2'
2
+ Version = VERSION = '2014.2.0.pre3'
3
3
  end
@@ -316,6 +316,19 @@ New functionality in 2014.2
316
316
  on rubygems.org were unofficial builds, and prone to fail in
317
317
  non-interactive environments like bundler.
318
318
 
319
+ # (SIR#75097 / P4RUBY-169)
320
+ Add `enviro_file` property to P4 object, which underneath, uses the
321
+ new `SetEnviroFile`/`GetEnviroFile` mechanism from the 14.2 C++ API.
322
+
323
+ Bugs fixed in 2014.2.0.pre3
324
+
325
+ * (BUG#75096 / P4RUBY-168)
326
+ Spec mappings updated to 14.2 definitions.
327
+
328
+ * (TASK#76795 / P4RUBY-176)
329
+ Configuring pre-compiled gems for Linux and OS X, for supported
330
+ Ruby versions (2.0, 2.1, 2.2).
331
+
319
332
  Bugs fixed in 2014.2.0.pre2
320
333
 
321
334
  # (BUG#76321 / P4RUBY-171)
metadata CHANGED
@@ -1,57 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: p4ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2014.2.0.pre2
4
+ version: 2014.2.0.pre3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perforce Software, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-02 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '='
18
- - !ruby/object:Gem::Version
19
- version: 10.3.2
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '='
25
- - !ruby/object:Gem::Version
26
- version: 10.3.2
27
- - !ruby/object:Gem::Dependency
28
- name: rake-compiler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.9'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.9'
41
- - !ruby/object:Gem::Dependency
42
- name: test-unit
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '3.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '3.0'
11
+ date: 2015-01-14 00:00:00.000000000 Z
12
+ dependencies: []
55
13
  description: Ruby extensions to the C++ Perforce API.
56
14
  email: support@perforce.com
57
15
  executables: []
@@ -98,17 +56,17 @@ require_paths:
98
56
  - lib
99
57
  required_ruby_version: !ruby/object:Gem::Requirement
100
58
  requirements:
101
- - - ">="
59
+ - - '>='
102
60
  - !ruby/object:Gem::Version
103
61
  version: '0'
104
62
  required_rubygems_version: !ruby/object:Gem::Requirement
105
63
  requirements:
106
- - - ">"
64
+ - - '>'
107
65
  - !ruby/object:Gem::Version
108
66
  version: 1.3.1
109
67
  requirements: []
110
68
  rubyforge_project:
111
- rubygems_version: 2.2.2
69
+ rubygems_version: 2.4.5
112
70
  signing_key:
113
71
  specification_version: 4
114
72
  summary: Ruby extensions to the C++ Perforce API