p4ruby 2015.2.1313860-x64-mingw32 → 2020.1.2056123-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +3 -865
- data/ext/P4/extconf.rb +62 -12
- data/ext/P4/p4.cpp +63 -9
- data/ext/P4/p4clientapi.cpp +47 -17
- data/ext/P4/p4clientapi.h +17 -7
- data/ext/P4/p4error.cpp +15 -0
- data/ext/P4/p4error.h +1 -0
- data/ext/P4/p4result.cpp +1 -0
- data/ext/P4/specmgr.cpp +54 -88
- data/lib/2.6/P4.so +0 -0
- data/lib/2.7/P4.so +0 -0
- data/lib/P4.rb +1 -1
- data/lib/P4.so +0 -0
- data/lib/P4/version.rb +3 -3
- metadata +11 -11
- data/lib/2.0/P4.so +0 -0
- data/lib/2.1/P4.so +0 -0
- data/lib/2.2/P4.so +0 -0
data/ext/P4/extconf.rb
CHANGED
@@ -6,10 +6,19 @@ require 'mkmf'
|
|
6
6
|
require 'net/ftp'
|
7
7
|
require 'P4/version'
|
8
8
|
require 'rbconfig'
|
9
|
+
require 'openssl'
|
9
10
|
|
10
11
|
# Set this to the main version directory we look up in ftp.perforce.com for the P4API
|
11
12
|
# This is ignored if you specify the version on the command line.
|
12
|
-
|
13
|
+
# Changed the hardcoded string so that the version is now derived from version.rb file
|
14
|
+
#P4API_VERSION_DIR = 'r19.1'
|
15
|
+
def p4api_version_dir
|
16
|
+
ver=P4::Version.split(".")
|
17
|
+
p4_major = ver[0].chars.last(2).join
|
18
|
+
p4_minor = ver[1]
|
19
|
+
dir = "r" + p4_major + "." + p4_minor
|
20
|
+
end
|
21
|
+
|
13
22
|
|
14
23
|
#==============================================================================
|
15
24
|
# Provide platform variables in P4-specific format
|
@@ -102,6 +111,15 @@ def calculate_p4osver
|
|
102
111
|
return ver
|
103
112
|
end
|
104
113
|
|
114
|
+
def gcc
|
115
|
+
@gcc ||= calculate_gcc
|
116
|
+
end
|
117
|
+
|
118
|
+
def calculate_gcc
|
119
|
+
gcc = RbConfig::CONFIG["GCC"]
|
120
|
+
return gcc
|
121
|
+
end
|
122
|
+
|
105
123
|
def uname_platform
|
106
124
|
@uname_platform ||= calculate_uname_platform
|
107
125
|
end
|
@@ -155,6 +173,13 @@ def set_platform_opts
|
|
155
173
|
end
|
156
174
|
end
|
157
175
|
|
176
|
+
def set_platform_cxxflags
|
177
|
+
if (p4osname == 'LINUX') && (gcc == 'yes')
|
178
|
+
$CXXFLAGS += " -std=c++11 "
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
|
158
183
|
def set_platform_cppflags
|
159
184
|
$CPPFLAGS += "-DOS_#{p4osname} "
|
160
185
|
$CPPFLAGS += "-DOS_#{p4osname}#{p4osver} "
|
@@ -214,6 +239,7 @@ def set_platform_libs
|
|
214
239
|
$LDFLAGS += ' -framework CoreFoundation -framework Foundation'
|
215
240
|
end
|
216
241
|
when 'LINUX', 'MINGW32'
|
242
|
+
$LDFLAGS += ' -Wl,--allow-multiple-definition'
|
217
243
|
have_library('supc++')
|
218
244
|
end
|
219
245
|
end
|
@@ -445,13 +471,34 @@ def ftp_download_dir(version)
|
|
445
471
|
end
|
446
472
|
|
447
473
|
def filename
|
474
|
+
openssl_number = OpenSSL::OPENSSL_VERSION.split(' ')[1].to_s
|
475
|
+
openssl_number = openssl_number.slice(0, (openssl_number.rindex('.')))
|
476
|
+
|
448
477
|
if RbConfig::CONFIG['target_os'].downcase =~ /nt|mswin|mingw/
|
449
|
-
'p4api.zip'
|
478
|
+
filename = 'p4api.zip'
|
479
|
+
if !openssl_number.to_s.empty?
|
480
|
+
case openssl_number.to_s
|
481
|
+
when /1.1/
|
482
|
+
filename = 'p4api-openssl1.1.1.zip'
|
483
|
+
when /1.0/
|
484
|
+
filename = 'p4api-openssl1.0.2.zip'
|
485
|
+
end
|
486
|
+
end
|
450
487
|
else
|
451
|
-
'p4api.tgz'
|
488
|
+
filename = 'p4api.tgz'
|
489
|
+
if !openssl_number.to_s.empty?
|
490
|
+
case openssl_number.to_s
|
491
|
+
when /1.1/
|
492
|
+
filename = 'p4api-glibc2.3-openssl1.1.1.tgz'
|
493
|
+
when /1.0/
|
494
|
+
filename = 'p4api-glibc2.3-openssl1.0.2.tgz'
|
495
|
+
end
|
496
|
+
end
|
452
497
|
end
|
498
|
+
return filename
|
453
499
|
end
|
454
500
|
|
501
|
+
|
455
502
|
def remote_files_matching(ftp, dir, regex)
|
456
503
|
ftp.ls(dir.to_s).map { |entry|
|
457
504
|
if match = entry.match(regex)
|
@@ -499,9 +546,8 @@ def download_api_via_ftp
|
|
499
546
|
# At one point, we allowed the gem build to just find the most recent p4api build.
|
500
547
|
# P4Ruby probably shouldn't do that by default.
|
501
548
|
#version_dir = find_latest_version_dir(ftp)
|
502
|
-
version_dir = P4API_VERSION_DIR
|
503
549
|
|
504
|
-
dir = ftp_download_dir(
|
550
|
+
dir = ftp_download_dir(p4api_version_dir)
|
505
551
|
ftp.chdir(dir)
|
506
552
|
|
507
553
|
puts "downloading #{filename} from #{dir} on ftp.perforce.com"
|
@@ -536,9 +582,11 @@ set_platform_opts
|
|
536
582
|
# based solely on platform detection.
|
537
583
|
set_platform_cppflags
|
538
584
|
set_platform_cflags
|
585
|
+
set_platform_cxxflags
|
539
586
|
|
540
587
|
puts "$CPPFLAGS #{$CPPFLAGS}"
|
541
588
|
puts "$CFLAGS #{$CFLAGS}"
|
589
|
+
puts "$CXXFLAGS #{$CXXFLAGS}"
|
542
590
|
|
543
591
|
# Setup additional system library definitions based on platform type before
|
544
592
|
# we setup other libraries, in order to preserve linking order
|
@@ -554,15 +602,17 @@ resolve_ssl_dirs
|
|
554
602
|
# If we happen to need SSL on Windows, we also need gdi32
|
555
603
|
if RbConfig::CONFIG['target_os'].downcase =~ /mingw/
|
556
604
|
have_library('gdi32') or raise
|
605
|
+
have_library('ole32') or raise
|
606
|
+
have_library('crypt32') or raise
|
557
607
|
end
|
558
608
|
|
559
|
-
|
560
|
-
|
561
|
-
unless do_ssl
|
562
|
-
have_library('p4sslstub') or raise
|
563
|
-
end
|
564
|
-
|
609
|
+
have_library('crypto') or raise
|
610
|
+
have_library('ssl') or raise
|
565
611
|
have_library('supp') or raise
|
612
|
+
have_library('p4script_sqlite') or raise
|
613
|
+
have_library('p4script_curl') or raise
|
614
|
+
have_library('p4script') or raise
|
615
|
+
have_library('p4script_c') or raise
|
566
616
|
have_library('rpc') or raise
|
567
617
|
have_library('client') or raise
|
568
618
|
|
@@ -577,4 +627,4 @@ create_p4rubyconf_header(version_info, $libs)
|
|
577
627
|
# don't believe we need to rely on actually.
|
578
628
|
create_header
|
579
629
|
|
580
|
-
create_makefile('P4')
|
630
|
+
create_makefile('P4')
|
data/ext/P4/p4.cpp
CHANGED
@@ -30,7 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
30
30
|
*
|
31
31
|
* Author : Tony Smith <tony@perforce.com> or <tony@smee.org>
|
32
32
|
*
|
33
|
-
* Description : Ruby bindings for the Perforce API.
|
33
|
+
* Description : Ruby bindings for the Perforce API.
|
34
34
|
*
|
35
35
|
* vim:ts=8:sw=4
|
36
36
|
******************************************************************************/
|
@@ -160,7 +160,7 @@ static VALUE p4_run_tagged( VALUE self, VALUE tagged )
|
|
160
160
|
flag = 0;
|
161
161
|
else
|
162
162
|
flag = NUM2INT( tagged ) ? 1 : 0;
|
163
|
-
|
163
|
+
|
164
164
|
int old_value = p4->IsTagged();
|
165
165
|
p4->Tagged( flag );
|
166
166
|
|
@@ -196,7 +196,7 @@ static VALUE p4_set_tagged( VALUE self, VALUE toggle )
|
|
196
196
|
flag = 0;
|
197
197
|
else
|
198
198
|
flag = NUM2INT( toggle ) ? 1 : 0;
|
199
|
-
|
199
|
+
|
200
200
|
p4->Tagged( flag );
|
201
201
|
return flag ? Qtrue : Qfalse; // Seems to be ignored...
|
202
202
|
}
|
@@ -489,6 +489,21 @@ static VALUE p4_set_ticket_file( VALUE self, VALUE path )
|
|
489
489
|
return Qtrue;
|
490
490
|
}
|
491
491
|
|
492
|
+
static VALUE p4_get_trust_file( VALUE self )
|
493
|
+
{
|
494
|
+
P4ClientApi *p4;
|
495
|
+
Data_Get_Struct( self, P4ClientApi, p4 );
|
496
|
+
return P4Utils::ruby_string( p4->GetTrustFile().Text() );
|
497
|
+
}
|
498
|
+
|
499
|
+
static VALUE p4_set_trust_file( VALUE self, VALUE path )
|
500
|
+
{
|
501
|
+
P4ClientApi *p4;
|
502
|
+
Data_Get_Struct( self, P4ClientApi, p4 );
|
503
|
+
p4->SetTrustFile( StringValuePtr( path ) );
|
504
|
+
return Qtrue;
|
505
|
+
}
|
506
|
+
|
492
507
|
static VALUE p4_get_user( VALUE self )
|
493
508
|
{
|
494
509
|
P4ClientApi *p4;
|
@@ -541,7 +556,7 @@ static VALUE p4_set_track( VALUE self, VALUE toggle )
|
|
541
556
|
flag = 0;
|
542
557
|
else
|
543
558
|
flag = NUM2INT( toggle ) ? 1 : 0;
|
544
|
-
|
559
|
+
|
545
560
|
p4->SetTrack( flag );
|
546
561
|
return flag ? Qtrue : Qfalse; // Seems to be ignored...
|
547
562
|
}
|
@@ -567,11 +582,37 @@ static VALUE p4_set_streams( VALUE self, VALUE toggle )
|
|
567
582
|
flag = 0;
|
568
583
|
else
|
569
584
|
flag = NUM2INT( toggle ) ? 1 : 0;
|
570
|
-
|
585
|
+
|
571
586
|
p4->SetStreams( flag );
|
572
587
|
return flag ? Qtrue : Qfalse; // Seems to be ignored...
|
573
588
|
}
|
574
589
|
|
590
|
+
static VALUE p4_get_graph( VALUE self )
|
591
|
+
{
|
592
|
+
P4ClientApi *p4;
|
593
|
+
Data_Get_Struct( self, P4ClientApi, p4 );
|
594
|
+
return p4->IsGraph() ? Qtrue : Qfalse;
|
595
|
+
}
|
596
|
+
|
597
|
+
static VALUE p4_set_graph( VALUE self, VALUE toggle )
|
598
|
+
{
|
599
|
+
P4ClientApi *p4;
|
600
|
+
Data_Get_Struct( self, P4ClientApi, p4 );
|
601
|
+
|
602
|
+
// The user might have passed an integer, or it might be a boolean,
|
603
|
+
// we convert to int for consistency.
|
604
|
+
int flag = 0;
|
605
|
+
if( toggle == Qtrue )
|
606
|
+
flag = 1;
|
607
|
+
else if( toggle == Qfalse )
|
608
|
+
flag = 0;
|
609
|
+
else
|
610
|
+
flag = NUM2INT( toggle ) ? 1 : 0;
|
611
|
+
|
612
|
+
p4->SetGraph( flag );
|
613
|
+
return flag ? Qtrue : Qfalse; // Seems to be ignored...
|
614
|
+
}
|
615
|
+
|
575
616
|
/*******************************************************************************
|
576
617
|
* Running commands. General purpose Run method and method for supplying
|
577
618
|
* input to "p4 xxx -i" commands
|
@@ -599,7 +640,7 @@ static VALUE p4_run( VALUE self, VALUE args )
|
|
599
640
|
char *cmd = StringValuePtr( v );
|
600
641
|
argc = NUM2INT( rb_funcall( flatArgs, idLength, 0 ) );
|
601
642
|
|
602
|
-
// Allocate storage on the stack so it's automatically reclaimed
|
643
|
+
// Allocate storage on the stack so it's automatically reclaimed
|
603
644
|
// when we exit.
|
604
645
|
char **p4args = ALLOCA_N( char *, argc + 1 );
|
605
646
|
|
@@ -917,7 +958,7 @@ static VALUE p4map_new( int argc, VALUE *argv, VALUE pClass )
|
|
917
958
|
|
918
959
|
// First arg is the class
|
919
960
|
// pClass = argv[ 0 ];
|
920
|
-
|
961
|
+
|
921
962
|
// Now instantiate the new object.
|
922
963
|
self = Data_Wrap_Struct( pClass, 0, p4map_free, m );
|
923
964
|
rb_obj_call_init( self, 0, argv );
|
@@ -1066,7 +1107,7 @@ static VALUE p4map_reverse( VALUE self )
|
|
1066
1107
|
return rval;
|
1067
1108
|
}
|
1068
1109
|
|
1069
|
-
//
|
1110
|
+
//
|
1070
1111
|
// P4::Map#translate( string, fwd=true )
|
1071
1112
|
//
|
1072
1113
|
static VALUE p4map_trans( int argc, VALUE *argv, VALUE self )
|
@@ -1076,7 +1117,7 @@ static VALUE p4map_trans( int argc, VALUE *argv, VALUE self )
|
|
1076
1117
|
VALUE string;
|
1077
1118
|
|
1078
1119
|
if( argc < 1 || argc > 2 )
|
1079
|
-
rb_raise( rb_eArgError,
|
1120
|
+
rb_raise( rb_eArgError,
|
1080
1121
|
"Invalid arguments to P4::Map#translate. "
|
1081
1122
|
"Pass the string you wish to translate, and an optional "
|
1082
1123
|
"boolean to indicate whether translation should be in "
|
@@ -1155,6 +1196,14 @@ static VALUE p4msg_get_text( VALUE self )
|
|
1155
1196
|
return e->GetText();
|
1156
1197
|
}
|
1157
1198
|
|
1199
|
+
static VALUE p4msg_get_dict( VALUE self )
|
1200
|
+
{
|
1201
|
+
P4Error * e = 0;
|
1202
|
+
|
1203
|
+
Data_Get_Struct( self, P4Error, e );
|
1204
|
+
return e->GetDict();
|
1205
|
+
}
|
1206
|
+
|
1158
1207
|
static VALUE p4msg_get_id( VALUE self )
|
1159
1208
|
{
|
1160
1209
|
P4Error * e = 0;
|
@@ -1197,6 +1246,8 @@ void Init_P4()
|
|
1197
1246
|
rb_define_method( cP4, "tagged=", RUBY_METHOD_FUNC(p4_set_tagged), 1 );
|
1198
1247
|
rb_define_method( cP4, "track?", RUBY_METHOD_FUNC(p4_get_track) , 0 );
|
1199
1248
|
rb_define_method( cP4, "track=", RUBY_METHOD_FUNC(p4_set_track) , 1 );
|
1249
|
+
rb_define_method( cP4, "graph?", RUBY_METHOD_FUNC(p4_get_graph) , 0 );
|
1250
|
+
rb_define_method( cP4, "graph=", RUBY_METHOD_FUNC(p4_set_graph) , 1 );
|
1200
1251
|
|
1201
1252
|
|
1202
1253
|
// Perforce client settings.
|
@@ -1228,6 +1279,8 @@ void Init_P4()
|
|
1228
1279
|
rb_define_method( cP4, "protocol", RUBY_METHOD_FUNC(p4_set_protocol), 2 );
|
1229
1280
|
rb_define_method( cP4, "ticket_file", RUBY_METHOD_FUNC(p4_get_ticket_file), 0 );
|
1230
1281
|
rb_define_method( cP4, "ticket_file=", RUBY_METHOD_FUNC(p4_set_ticket_file), 1 );
|
1282
|
+
rb_define_method( cP4, "trust_file", RUBY_METHOD_FUNC(p4_get_trust_file), 0 );
|
1283
|
+
rb_define_method( cP4, "trust_file=", RUBY_METHOD_FUNC(p4_set_trust_file), 1 );
|
1231
1284
|
rb_define_method( cP4, "user", RUBY_METHOD_FUNC(p4_get_user) , 0 );
|
1232
1285
|
rb_define_method( cP4, "user=", RUBY_METHOD_FUNC(p4_set_user) , 1 );
|
1233
1286
|
rb_define_method( cP4, "version", RUBY_METHOD_FUNC(p4_get_version) , 0 );
|
@@ -1327,6 +1380,7 @@ void Init_P4()
|
|
1327
1380
|
rb_define_method( cP4Msg, "msgid", RUBY_METHOD_FUNC(p4msg_get_id), 0);
|
1328
1381
|
rb_define_method( cP4Msg, "severity", RUBY_METHOD_FUNC(p4msg_get_severity), 0);
|
1329
1382
|
rb_define_method( cP4Msg, "generic", RUBY_METHOD_FUNC(p4msg_get_generic), 0);
|
1383
|
+
rb_define_method( cP4Msg, "dictionary", RUBY_METHOD_FUNC(p4msg_get_dict), 0);
|
1330
1384
|
rb_define_method( cP4Msg, "to_s", RUBY_METHOD_FUNC(p4msg_get_text), 0);
|
1331
1385
|
|
1332
1386
|
// P4::Progress class.
|
data/ext/P4/p4clientapi.cpp
CHANGED
@@ -92,9 +92,19 @@ P4ClientApi::P4ClientApi() : ui( &specMgr )
|
|
92
92
|
const char *t;
|
93
93
|
|
94
94
|
henv.GetTicketFile( ticketFile );
|
95
|
-
|
95
|
+
|
96
|
+
if( (t = enviro->Get("P4TICKETS")) )
|
97
|
+
ticketFile = t;
|
98
|
+
|
99
|
+
//
|
100
|
+
// Load the current trust file. Start with the default, and then
|
101
|
+
// override it if P4TRUST is set.
|
102
|
+
//
|
103
|
+
|
104
|
+
henv.GetTrustFile( trustFile );
|
105
|
+
|
96
106
|
if( (t = enviro->Get("P4TICKETS")) )
|
97
|
-
|
107
|
+
trustFile = t;
|
98
108
|
|
99
109
|
//
|
100
110
|
// Load the current P4CHARSET if set.
|
@@ -132,7 +142,7 @@ P4ClientApi::GetEnviroFile()
|
|
132
142
|
return enviro->GetEnviroFile();
|
133
143
|
}
|
134
144
|
|
135
|
-
void
|
145
|
+
void
|
136
146
|
P4ClientApi::SetApiLevel( int level )
|
137
147
|
{
|
138
148
|
StrBuf b;
|
@@ -192,7 +202,14 @@ P4ClientApi::SetTicketFile( const char *p )
|
|
192
202
|
ticketFile = p;
|
193
203
|
}
|
194
204
|
|
195
|
-
void
|
205
|
+
void
|
206
|
+
P4ClientApi::SetTrustFile( const char *p )
|
207
|
+
{
|
208
|
+
client.SetTrustFile( p );
|
209
|
+
trustFile = p;
|
210
|
+
}
|
211
|
+
|
212
|
+
void
|
196
213
|
P4ClientApi::SetDebug( int d )
|
197
214
|
{
|
198
215
|
debug = d;
|
@@ -241,7 +258,7 @@ P4ClientApi::SetEnv( const char *var, const char *val )
|
|
241
258
|
// connect to the Perforce server.
|
242
259
|
//
|
243
260
|
|
244
|
-
VALUE
|
261
|
+
VALUE
|
245
262
|
P4ClientApi::Connect()
|
246
263
|
{
|
247
264
|
if ( P4RDB_COMMANDS )
|
@@ -288,7 +305,7 @@ P4ClientApi::ConnectOrReconnect()
|
|
288
305
|
//
|
289
306
|
// Disconnect session
|
290
307
|
//
|
291
|
-
VALUE
|
308
|
+
VALUE
|
292
309
|
P4ClientApi::Disconnect()
|
293
310
|
{
|
294
311
|
if ( P4RDB_COMMANDS )
|
@@ -306,6 +323,9 @@ P4ClientApi::Disconnect()
|
|
306
323
|
// Clear the specdef cache.
|
307
324
|
specMgr.Reset();
|
308
325
|
|
326
|
+
// Clear out any results from the last command
|
327
|
+
ui.Reset();
|
328
|
+
|
309
329
|
return Qtrue;
|
310
330
|
}
|
311
331
|
|
@@ -322,7 +342,7 @@ P4ClientApi::Connected()
|
|
322
342
|
return Qfalse;
|
323
343
|
}
|
324
344
|
|
325
|
-
void
|
345
|
+
void
|
326
346
|
P4ClientApi::Tagged( int enable )
|
327
347
|
{
|
328
348
|
if( enable )
|
@@ -359,6 +379,14 @@ void P4ClientApi::SetStreams( int enable )
|
|
359
379
|
ClearStreamsMode();
|
360
380
|
}
|
361
381
|
|
382
|
+
void P4ClientApi::SetGraph( int enable )
|
383
|
+
{
|
384
|
+
if ( enable )
|
385
|
+
SetGraphMode();
|
386
|
+
else
|
387
|
+
ClearGraphMode();
|
388
|
+
}
|
389
|
+
|
362
390
|
int
|
363
391
|
P4ClientApi::GetServerLevel()
|
364
392
|
{
|
@@ -410,7 +438,7 @@ P4ClientApi::IsIgnored( const char *path )
|
|
410
438
|
// is raised.
|
411
439
|
//
|
412
440
|
|
413
|
-
VALUE
|
441
|
+
VALUE
|
414
442
|
P4ClientApi::Run( const char *cmd, int argc, char * const *argv )
|
415
443
|
{
|
416
444
|
// Save the entire command string for our error messages. Makes it
|
@@ -480,6 +508,9 @@ P4ClientApi::RunCmd( const char *cmd, ClientUser *ui, int argc, char * const *ar
|
|
480
508
|
if ( IsStreams() && apiLevel > 69 )
|
481
509
|
client.SetVar( "enableStreams", "" );
|
482
510
|
|
511
|
+
if ( IsGraph() && apiLevel > 81 )
|
512
|
+
client.SetVar( "enableGraph", "" );
|
513
|
+
|
483
514
|
// If maxresults or maxscanrows is set, enforce them now
|
484
515
|
if( maxResults ) client.SetVar( "maxResults", maxResults );
|
485
516
|
if( maxScanRows ) client.SetVar( "maxScanRows", maxScanRows );
|
@@ -512,7 +543,7 @@ P4ClientApi::RunCmd( const char *cmd, ClientUser *ui, int argc, char * const *ar
|
|
512
543
|
|
513
544
|
//
|
514
545
|
// Parses a string supplied by the user into a hash. To do this we need
|
515
|
-
// the specstring from the server. We try to cache those as we see them,
|
546
|
+
// the specstring from the server. We try to cache those as we see them,
|
516
547
|
// but the user may not have executed any commands to allow us to cache
|
517
548
|
// them so we may have to fetch the spec first.
|
518
549
|
//
|
@@ -540,7 +571,7 @@ P4ClientApi::ParseSpec( const char * type, const char *form )
|
|
540
571
|
Error e;
|
541
572
|
VALUE v;
|
542
573
|
v = specMgr.StringToSpec( type, form, &e );
|
543
|
-
|
574
|
+
|
544
575
|
if ( e.Test() )
|
545
576
|
{
|
546
577
|
if( exceptionLevel )
|
@@ -551,7 +582,7 @@ P4ClientApi::ParseSpec( const char * type, const char *form )
|
|
551
582
|
|
552
583
|
return v;
|
553
584
|
}
|
554
|
-
|
585
|
+
|
555
586
|
|
556
587
|
//
|
557
588
|
// Converts a hash supplied by the user into a string using the specstring
|
@@ -577,14 +608,14 @@ P4ClientApi::FormatSpec( const char * type, VALUE hash )
|
|
577
608
|
}
|
578
609
|
}
|
579
610
|
|
580
|
-
// Got a specdef so now we can attempt to convert.
|
611
|
+
// Got a specdef so now we can attempt to convert.
|
581
612
|
StrBuf buf;
|
582
613
|
Error e;
|
583
614
|
|
584
615
|
specMgr.SpecToString( type, hash, buf, &e );
|
585
616
|
if( !e.Test() )
|
586
617
|
return P4Utils::ruby_string( buf.Text() );
|
587
|
-
|
618
|
+
|
588
619
|
if( exceptionLevel )
|
589
620
|
{
|
590
621
|
StrBuf m;
|
@@ -620,7 +651,7 @@ P4ClientApi::SpecFields( const char * type )
|
|
620
651
|
|
621
652
|
return specMgr.SpecFields( type );
|
622
653
|
}
|
623
|
-
|
654
|
+
|
624
655
|
//
|
625
656
|
// Raises an exception or returns Qfalse on bad input
|
626
657
|
//
|
@@ -686,13 +717,13 @@ P4ClientApi::Except( const char *func, const char *msg )
|
|
686
717
|
StrBuf errors;
|
687
718
|
StrBuf warnings;
|
688
719
|
int terminate = 0;
|
689
|
-
|
720
|
+
|
690
721
|
m << "[" << func << "] " << msg;
|
691
722
|
|
692
723
|
// Now append any errors and warnings to the text
|
693
724
|
ui.GetResults().FmtErrors( errors );
|
694
725
|
ui.GetResults().FmtWarnings( warnings );
|
695
|
-
|
726
|
+
|
696
727
|
if( errors.Length() )
|
697
728
|
{
|
698
729
|
m << "\n" << errors;
|
@@ -729,4 +760,3 @@ P4ClientApi::Except( const char *func, Error *e )
|
|
729
760
|
e->Fmt( &m );
|
730
761
|
Except( func, m.Text() );
|
731
762
|
}
|
732
|
-
|