p4ruby 2019.1.1873991 → 2021.1.2196401

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.
@@ -37,6 +37,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
37
  #include <ruby.h>
38
38
  #include "undefdups.h"
39
39
  #include <p4/clientapi.h>
40
+ #include <p4/strtable.h>
40
41
  #include <p4/i18napi.h>
41
42
  #include <p4/enviro.h>
42
43
  #include <p4/hostenv.h>
@@ -142,6 +143,21 @@ P4ClientApi::GetEnviroFile()
142
143
  return enviro->GetEnviroFile();
143
144
  }
144
145
 
146
+ void
147
+ P4ClientApi::SetEVar( const char *var, const char *val )
148
+ {
149
+ StrRef sVar( var );
150
+ StrRef sVal( val );
151
+ client.SetEVar( sVar, sVal );
152
+ }
153
+
154
+ const StrPtr *
155
+ P4ClientApi::GetEVar( const char *var )
156
+ {
157
+ StrRef sVar( var );
158
+ return client.GetEVar( sVar );
159
+ }
160
+
145
161
  void
146
162
  P4ClientApi::SetApiLevel( int level )
147
163
  {
@@ -323,6 +339,9 @@ P4ClientApi::Disconnect()
323
339
  // Clear the specdef cache.
324
340
  specMgr.Reset();
325
341
 
342
+ // Clear out any results from the last command
343
+ ui.Reset();
344
+
326
345
  return Qtrue;
327
346
  }
328
347
 
@@ -426,12 +445,6 @@ P4ClientApi::IsIgnored( const char *path )
426
445
  return ignore->Reject( p, client.GetIgnoreFile() );
427
446
  }
428
447
 
429
- VALUE
430
- P4ClientApi::Reset()
431
- {
432
- ui.Reset();
433
- }
434
-
435
448
  //
436
449
  // Run returns the results of the command. If the client has not been
437
450
  // connected, then an exception is raised but errors from Perforce
@@ -702,6 +715,17 @@ P4ClientApi::SetProgress( VALUE progress ) {
702
715
  return ui.SetProgress( progress );
703
716
  }
704
717
 
718
+ VALUE
719
+ P4ClientApi::SetSSOHandler( VALUE h )
720
+ {
721
+ if ( P4RDB_COMMANDS )
722
+ fprintf( stderr, "[P4] Received SSO handler object\n" );
723
+
724
+ ui.SetRubySSOHandler( h );
725
+
726
+ return Qtrue;
727
+ }
728
+
705
729
 
706
730
  void
707
731
  P4ClientApi::GCMark()
@@ -764,3 +788,48 @@ P4ClientApi::Except( const char *func, Error *e )
764
788
  Except( func, m.Text() );
765
789
  }
766
790
 
791
+ //
792
+ // SSO Handlers
793
+ //
794
+
795
+ VALUE
796
+ P4ClientApi::SetEnableSSO( VALUE e )
797
+ {
798
+ return ui.EnableSSO( e );
799
+ }
800
+
801
+ VALUE
802
+ P4ClientApi::GetEnableSSO()
803
+ {
804
+ return ui.SSOEnabled();
805
+ }
806
+
807
+ VALUE
808
+ P4ClientApi::GetSSOVars()
809
+ {
810
+ return ui.GetSSOVars();
811
+ }
812
+
813
+ VALUE
814
+ P4ClientApi::SetSSOPassResult( VALUE r )
815
+ {
816
+ return ui.SetSSOPassResult( r );
817
+ }
818
+
819
+ VALUE
820
+ P4ClientApi::GetSSOPassResult()
821
+ {
822
+ return ui.GetSSOPassResult();
823
+ }
824
+
825
+ VALUE
826
+ P4ClientApi::SetSSOFailResult( VALUE r )
827
+ {
828
+ return ui.SetSSOFailResult( r );
829
+ }
830
+
831
+ VALUE
832
+ P4ClientApi::GetSSOFailResult()
833
+ {
834
+ return ui.GetSSOFailResult();
835
+ }
data/ext/P4/p4clientapi.h CHANGED
@@ -73,6 +73,7 @@ public:
73
73
  void SetClient( const char *c ) { client.SetClient( c ); }
74
74
  void SetCwd( const char *c );
75
75
  void SetEnviroFile( const char *c );
76
+ void SetEVar( const char *var, const char *val );
76
77
  void SetHost( const char *h ) { client.SetHost( h ); }
77
78
  void SetIgnoreFile( const char *f ) { client.SetIgnoreFile( f ); }
78
79
  void SetMaxResults( int v ) { maxResults = v; }
@@ -96,6 +97,7 @@ public:
96
97
  const StrPtr &GetCwd() { return client.GetCwd(); }
97
98
  const char * GetEnv( const char *v);
98
99
  const StrPtr *GetEnviroFile();
100
+ const StrPtr *GetEVar(const char *v);
99
101
  const StrPtr &GetHost() { return client.GetHost(); }
100
102
  const StrPtr &GetIgnoreFile() { return client.GetIgnoreFile();}
101
103
  const StrPtr &GetLanguage() { return client.GetLanguage(); }
@@ -121,7 +123,6 @@ public:
121
123
  VALUE Connect(); // P4Exception on error
122
124
  VALUE Connected(); // Return true if connected and not dropped.
123
125
  VALUE Disconnect();
124
- VALUE Reset(); // Clear out any results from the previous command
125
126
 
126
127
  // Executing commands.
127
128
  VALUE Run( const char *cmd, int argc, char * const *argv );
@@ -170,6 +171,17 @@ public:
170
171
  VALUE SetProgress( VALUE progress );
171
172
  VALUE GetProgress() { return ui.GetProgress(); }
172
173
 
174
+ // SSO handler
175
+ VALUE SetEnableSSO( VALUE e );
176
+ VALUE GetEnableSSO();
177
+ VALUE GetSSOVars();
178
+ VALUE SetSSOPassResult( VALUE r );
179
+ VALUE GetSSOPassResult();
180
+ VALUE SetSSOFailResult( VALUE r );
181
+ VALUE GetSSOFailResult();
182
+ VALUE SetSSOHandler( VALUE handler );
183
+ VALUE GetSSOHandler() { return ui.GetRubySSOHandler(); }
184
+
173
185
  // Ruby garbage collection
174
186
  void GCMark();
175
187
 
@@ -248,4 +260,3 @@ private:
248
260
  int maxScanRows;
249
261
  int maxLockTime;
250
262
  };
251
-
data/ext/P4/p4result.cpp CHANGED
@@ -57,6 +57,7 @@ P4Result::P4Result()
57
57
  VALUE cP4 = rb_const_get_at( rb_cObject, idP4 );
58
58
  cP4Msg = rb_const_get_at( cP4, idP4Msg );
59
59
 
60
+ Reset();
60
61
  }
61
62
 
62
63
 
@@ -106,3 +106,32 @@ SpecDataRuby::SetLine( SpecElem *sd, int x, const StrPtr *v, Error *e )
106
106
  }
107
107
  return;
108
108
  }
109
+
110
+ void
111
+ SpecDataRuby::Comment ( SpecElem *sd, int x, const char **wv, int nl, Error *e )
112
+ {
113
+ VALUE key;
114
+ VALUE val;
115
+ VALUE ary;
116
+ StrBuf t;
117
+
118
+ key = P4Utils::ruby_string( sd->tag.Text(), sd->tag.Length() );
119
+ val = P4Utils::ruby_string( *wv );
120
+
121
+ if( sd->IsList() )
122
+ {
123
+
124
+ ary = rb_hash_aref( hash, key ); // rb_hash_aref - get the value for hash key
125
+ if( ary == Qnil )
126
+ {
127
+ ary = rb_ary_new();
128
+ rb_hash_aset( hash, key, ary ); // rb_hash_aset(hash, key, value) - set the hash key to value
129
+ }
130
+ rb_ary_store( ary, x, val );
131
+ }
132
+ else
133
+ {
134
+ rb_hash_aset( hash, key, val );
135
+ }
136
+ return;
137
+ }
data/ext/P4/p4specdata.h CHANGED
@@ -44,6 +44,8 @@ class SpecDataRuby : public SpecData
44
44
  virtual StrPtr *GetLine( SpecElem *sd, int x, const char **cmt );
45
45
  virtual void SetLine( SpecElem *sd, int x, const StrPtr *val,
46
46
  Error *e );
47
+ virtual void Comment( SpecElem *sd, int x, const char **wv,
48
+ int nl, Error *e );
47
49
 
48
50
  private:
49
51
  VALUE hash;
data/ext/P4/specmgr.cpp CHANGED
@@ -63,22 +63,6 @@ struct defaultspec {
63
63
  "unlocked/locked;;"
64
64
  "View;code:311;type:wlist;words:2;len:64;;"
65
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
- "ImportedBy;code:212;type:line;ro;fmt:L;len:32;;"
76
- "Identity;code:213;type:line;;"
77
- "Description;code:206;type:text;rq;;"
78
- "Jobs;code:209;type:wlist;words:2;len:32;;"
79
- "Stream;code:214;type:line;len:64;;"
80
- "Files;code:210;type:llist;len:64;;"
81
- },
82
66
  {
83
67
  "change",
84
68
  "Change;code:201;rq;ro;fmt:L;seq:1;len:10;;"
@@ -123,42 +107,6 @@ struct defaultspec {
123
107
  "View;code:311;type:wlist;words:2;len:64;;"
124
108
  "ChangeView;code:317;type:llist;len:64;;"
125
109
  },
126
- {
127
- "clientX",
128
- "Client;code:301;rq;ro;seq:1;len:32;;"
129
- "Update;code:302;type:date;ro;seq:2;fmt:L;len:20;;"
130
- "Access;code:303;type:date;ro;seq:4;fmt:L;len:20;;"
131
- "Owner;code:304;seq:3;fmt:R;len:32;;"
132
- "Host;code:305;seq:5;fmt:R;len:32;;"
133
- "Description;code:306;type:text;len:128;;"
134
- "Root;code:307;rq;type:line;len:64;;"
135
- "AltRoots;code:308;type:llist;len:64;;"
136
- "Options;code:309;type:line;len:64;val:"
137
- "noallwrite/allwrite,noclobber/clobber,nocompress/compress,"
138
- "unlocked/locked,nomodtime/modtime,normdir/rmdir;;"
139
- "SubmitOptions;code:313;type:select;fmt:L;len:25;val:"
140
- "submitunchanged/submitunchanged+reopen/revertunchanged/"
141
- "revertunchanged+reopen/leaveunchanged/leaveunchanged+reopen;;"
142
- "LineEnd;code:310;type:select;fmt:L;len:12;val:"
143
- "local/unix/mac/win/share;;"
144
- "View;code:311;type:wlist;words:2;len:64;;"
145
- },
146
- {
147
- "clientSpecing021",
148
- "Client;code:301;rq;ro;len:32;;"
149
- "Update;code:302;type:date;ro;len:20;;"
150
- "Access;code:303;type:date;ro;len:20;;"
151
- "Owner;code:304;len:32;;"
152
- "Host;code:305;len:32;;"
153
- "Description;code:306;type:text;len:128;;"
154
- "Root;code:307;rq;type:line;len:64;;"
155
- "AltRoots;code:308;type:text;len:64;;"
156
- "Options;code:309;type:line;len:64;val:"
157
- "noallwrite/allwrite,noclobber/clobber,nocompress/compress,"
158
- "unlocked/locked,nomodtime/modtime,normdir/rmdir;;"
159
- "LineEnd;code:310;type:select;len:12;val:local/unix/mac/win/share;;"
160
- "View;code:311;type:wlist;words:2;len:64;;"
161
- },
162
110
  {
163
111
  "depot",
164
112
  "Depot;code:251;rq;ro;len:32;;"
@@ -172,53 +120,19 @@ struct defaultspec {
172
120
  "Map;code:257;rq;len:64;;"
173
121
  "SpecMap;code:259;type:wlist;len:64;;"
174
122
  },
175
- {
176
- "extensionGbl",
177
- "ExtName;code:901;type:line;opt:once;len:64;;"
178
- "ExtDescription;code:902;type:text;opt:once;len:128;;"
179
- "ExtVersion;code:903;type:line;opt:once;len:32;;"
180
- "ExtUUID;code:904;type:line;opt:once;len:36;;"
181
- "ExtRev;code:905;type:word;opt:once;len:20;;"
182
- "ExtMaxScriptTime;code:913;type:word;len:12;;"
183
- "ExtMaxScriptMem;code:914;type:word;len:12;;"
184
- "ExtAllowedGroups;code:915;type:wlist;len:32;opt:default;;"
185
- "ExtEnabled;code:916;type:word;opt:default;len:12;;"
186
- "ExtP4USER;code:917;type:word;opt:default;len:12;;"
187
- "Name;code:906;type:line;opt:default;len:32;;"
188
- "Owner;code:907;type:word;opt:default;len:36;;"
189
- "Update;code:908;type:date;opt:always;fmt:L;len:20;;"
190
- "Description;code:909;type:text;opt:required;len:128;;"
191
- "ExtConfig;code:912;type:text;opt:required;len:256;;"
192
- },
193
- {
194
- "extensionIns",
195
- "ExtName;code:901;type:line;opt:once;len:64;;"
196
- "ExtDescription;code:902;type:text;opt:once;len:128;;"
197
- "ExtVersion;code:903;type:line;opt:once;len:32;;"
198
- "ExtUUID;code:904;type:line;opt:once;len:36;;"
199
- "ExtRev;code:905;type:word;opt:once;len:20;;"
200
- "ExtMaxScriptTime;code:913;type:word;len:12;;"
201
- "ExtMaxScriptMem;code:914;type:word;len:12;;"
202
- "ExtEnabled;code:916;type:word;opt:default;len:12;;"
203
- "Name;code:906;type:line;opt:default;len:32;;"
204
- "Owner;code:907;type:word;opt:default;len:36;;"
205
- "Update;code:908;type:date;opt:always;fmt:L;len:20;;"
206
- "Description;code:909;type:text;opt:required;len:128;;"
207
- "ExtConfig;code:912;type:text;opt:required;len:256;;"
208
- },
209
123
  {
210
124
  "group",
211
125
  "Group;code:401;rq;ro;len:32;;"
212
126
  "MaxResults;code:402;type:word;len:12;;"
213
127
  "MaxScanRows;code:403;type:word;len:12;;"
214
128
  "MaxLockTime;code:407;type:word;len:12;;"
215
- "MaxOpenFiles;code:413;type:word;len:12;;"
129
+ "MaxOpenFiles;code:413;type:word;len:12;;"
216
130
  "Timeout;code:406;type:word;len:12;;"
217
131
  "PasswordTimeout;code:409;type:word;len:12;;"
218
132
  "LdapConfig;code:410;type:line;len:128;;"
219
133
  "LdapSearchQuery;code:411;type:line;len:128;;"
220
134
  "LdapUserAttribute;code:412;type:line;len:128;;"
221
- "LdapUserDNAttribute;code:414;type:line;len:128;;"
135
+ "LdapUserDNAttribute;code:414;type:line;len:128;;"
222
136
  "Subgroups;code:404;type:wlist;len:32;opt:default;;"
223
137
  "Owners;code:408;type:wlist;len:32;opt:default;;"
224
138
  "Users;code:405;type:wlist;len:32;opt:default;;"
@@ -286,12 +200,13 @@ struct defaultspec {
286
200
  "Clients;code:458;len:8;;"
287
201
  "Users;code:459;len:8;;"
288
202
  "Files;code:460;len:8;;"
289
- "Repos;code:462;len:8;;"
290
- },
203
+ "Repos;code:462;len:8;;"
204
+ "ExtraCapabilities;code:463;type:llist;len:512;;"
205
+ },
291
206
  {
292
207
  "protect",
293
- "SubPath;code:502;ro;len:64;;"
294
- "Update;code:503;type:date;ro;fmt:L;len:20;;"
208
+ "SubPath;code:502;ro;len:64;;"
209
+ "Update;code:503;type:date;ro;fmt:L;len:20;;"
295
210
  "Protections;code:501;fmt:C;type:wlist;words:5;opt:default;z;len:64;;"
296
211
  },
297
212
  {
@@ -312,45 +227,40 @@ struct defaultspec {
312
227
  },
313
228
  {
314
229
  "repo",
315
- "Repo;code:1001;rq;ro;len:128;;"
316
- "Owner;code:1002;len:32;;"
317
- "Created;code:1003;type:date;ro;fmt:L;len:20;;"
318
- "Pushed;code:1004;type:date;ro;fmt:L;len:20;;"
319
- "ForkedFrom;code:1005;ro;len:128;;"
320
- "Description;code:1006;type:text;len:128;;"
321
- "DefaultBranch;code:1007;len:32;;"
322
- "MirroredFrom;code:1008;len:32;;"
323
- "Options;code:1009;type:select;len:10;val:lfs/nolfs;;"
230
+ "Repo;code:1001;rq;ro;fmt:L;len:128;;"
231
+ "Owner;code:1002;fmt:R;len:32;;"
232
+ "Created;code:1003;type:date;ro;fmt:L;len:20;;"
233
+ "Pushed;code:1004;type:date;ro;fmt:R;len:20;;"
234
+ "ForkedFrom;code:1005;ro;fmt:L;len:128;;"
235
+ "Description;code:1006;type:text;len:128;;"
236
+ "DefaultBranch;code:1007;fmt:L;len:32;;"
237
+ "MirroredFrom;code:1008;fmt:R;len:32;;"
238
+ "Options;code:1009;type:select;len:10;val:lfs/nolfs;;"
239
+ "GconnMirrorServerId;code:1010;fmt:L;len:32;;"
240
+ "GconnMirrorSecretToken;code:NNN;len:36;;"
241
+ "GconnMirrorStatus;code:NNN;len:8;;"
242
+ "GconnMirrorExcludedBranches;code:NNN;len:256;;"
243
+ "GconnMirrorHideFetchUrl;code:NNN;len:5;;"
324
244
  },
325
245
  {
326
246
  "server",
327
247
  "ServerID;code:751;rq;ro;len:32;;"
328
- "Type;code:752;rq;len:32;;"
329
- "Name;code:753;type:line;len:32;;"
330
- "Address;code:754;type:line;len:32;;"
331
- "ExternalAddress;code:755;type:line;len:32;;"
332
- "Services;code:756;rq;len:128;;"
333
- "Options;code:764;type:line;len:32;val:"
334
- "nomandatory/mandatory;;"
335
- "ReplicatingFrom;code:765;type:line;len:32;;"
336
- "Description;code:757;type:text;len:128;;"
337
- "User;code:761;type:line;len:64;;"
338
- "AllowedAddresses;code:763;type:wlist;len:64;;"
339
- "ClientDataFilter;code:758;type:wlist;len:64;;"
340
- "RevisionDataFilter;code:759;type:wlist;len:64;;"
341
- "ArchiveDataFilter;code:760;type:wlist;len:64;;"
342
- "DistributedConfig;code:762;type:text;len:128;;"
343
- },
344
- {
345
- "specW",
346
- "Fields;code:351;type:wlist;words:5;rq;;"
347
- "Required;code:357;type:wlist;;"
348
- "Readonly;code:358;type:wlist;;"
349
- "Words;code:352;type:wlist;words:2;;"
350
- "Formats;code:353;type:wlist;words:3;;"
351
- "Values;code:354;type:wlist;words:2;;"
352
- "Presets;code:355;type:wlist;words:2;;"
353
- "Comments;code:356;type:text;;"
248
+ "Type;code:752;rq;len:32;;"
249
+ "Name;code:753;type:line;len:32;;"
250
+ "Address;code:754;type:line;len:32;;"
251
+ "ExternalAddress;code:755;type:line;len:32;;"
252
+ "Services;code:756;rq;len:128;;"
253
+ "Options;code:764;type:line;len:32;val:"
254
+ "nomandatory/mandatory;;"
255
+ "ReplicatingFrom;code:765;type:line;len:32;;"
256
+ "Description;code:757;type:text;len:128;;"
257
+ "User;code:761;type:line;len:64;;"
258
+ "AllowedAddresses;code:763;type:wlist;len:64;;"
259
+ "UpdateCachedRepos;code:766;type:wlist;len:64;;"
260
+ "ClientDataFilter;code:758;type:wlist;len:64;;"
261
+ "RevisionDataFilter;code:759;type:wlist;len:64;;"
262
+ "ArchiveDataFilter;code:760;type:wlist;len:64;;"
263
+ "DistributedConfig;code:762;type:text;len:128;;"
354
264
  },
355
265
  {
356
266
  "spec",
@@ -360,6 +270,7 @@ struct defaultspec {
360
270
  "Values;code:354;type:wlist;words:2;;"
361
271
  "Presets;code:355;type:wlist;words:2;;"
362
272
  "Openable;code:362;type:wlist;words:2;;"
273
+ "Maxwords;code:361;type:wlist;words:2;;"
363
274
  "Comments;code:356;type:text;;"
364
275
  },
365
276
  {
@@ -376,9 +287,11 @@ struct defaultspec {
376
287
  "allsubmit/ownersubmit,unlocked/locked,"
377
288
  "toparent/notoparent,fromparent/nofromparent,"
378
289
  "mergedown/mergeany;open:isolate;;"
379
- "Paths;code:710;rq;type:wlist;words:2;maxwords:3;len:64;open:propagate;;"
380
- "Remapped;code:711;type:wlist;words:2;len:64;open:propagate;;"
381
- "Ignored;code:712;type:wlist;words:1;len:64;open:propagate;;"
290
+ "ParentView;code:NNN;rq;open:isolate;"
291
+ "pre:inherit;val:noinherit/inherit;;"
292
+ "Paths;code:710;rq;type:wlist;words:2;maxwords:3;len:64;open:propagate;fmt:C;;"
293
+ "Remapped;code:711;type:wlist;words:2;len:64;open:propagate;fmt:C;;"
294
+ "Ignored;code:712;type:wlist;words:1;len:64;open:propagate;fmt:C;;"
382
295
  "View;code:713;type:wlist;words:2;len:64;;"
383
296
  "ChangeView;code:714;type:llist;ro;len:64;;"
384
297
  },
data/lib/P4/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- class P4
2
- Version = VERSION = '2019.1.1873991'
3
- end
1
+ class P4
2
+ Version = VERSION = '2021.1.2196401'
3
+ end
data/lib/P4.rb CHANGED
@@ -118,6 +118,13 @@ class P4
118
118
  PROG_FAILDONE = 2
119
119
  PROG_FLUSH = 3
120
120
 
121
+ # SSO Handler return values constants
122
+ SSO_PASS = 0 # SSO succeeded (result is an authentication token)
123
+ SSO_FAIL = 1 # SSO failed (result will be logged as error message)
124
+ SSO_UNSET = 2 # Client has no SSO support
125
+ SSO_EXIT = 3 # Stop login process
126
+ SSO_SKIP = 4 # Fall back to default P4API behavior
127
+
121
128
  # Mappings for P4#each_<spec>
122
129
  # Hash of type vs. key
123
130
  SpecTypes = {
@@ -669,4 +676,13 @@ class P4
669
676
  HANDLED
670
677
  end
671
678
  end
679
+
680
+ #*****************************************************************************
681
+ # P4::SSOHandler class.
682
+ #*****************************************************************************
683
+ class SSOHandler
684
+ def authorize(vars, maxLength)
685
+ [ SSO_SKIP, "" ]
686
+ end
687
+ end
672
688
  end # class P4
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: p4ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2019.1.1873991
4
+ version: 2021.1.2196401
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perforce Software, Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-25 00:00:00.000000000 Z
11
+ date: 2021-10-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby extensions to the C++ Perforce API.
14
14
  email: support@perforce.com
@@ -46,11 +46,12 @@ files:
46
46
  - ext/P4/undefdups.h
47
47
  - lib/P4.rb
48
48
  - lib/P4/version.rb
49
- homepage: https://swarm.workshop.perforce.com/projects/perforce-software-p4ruby/
49
+ homepage: https://github.com/perforce/p4ruby
50
50
  licenses:
51
51
  - MIT
52
- metadata: {}
53
- post_install_message:
52
+ metadata:
53
+ documentation_uri: https://www.perforce.com/manuals/p4ruby/Content/P4Ruby/Home-p4ruby.html
54
+ post_install_message:
54
55
  rdoc_options: []
55
56
  require_paths:
56
57
  - lib
@@ -65,8 +66,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
66
  - !ruby/object:Gem::Version
66
67
  version: '0'
67
68
  requirements: []
68
- rubygems_version: 3.0.6
69
- signing_key:
69
+ rubygems_version: 3.2.15
70
+ signing_key:
70
71
  specification_version: 4
71
72
  summary: Ruby extensions to the C++ Perforce API
72
73
  test_files: []