| In: |
p4table.rb
|
| Parent: | Object |
*******************************************************************************
*******************************************************************************
| files | [R] | |
| id | [RW] |
***************************************************************************
Instance methods *************************************************************************** |
| meta | [RW] |
***************************************************************************
Instance methods *************************************************************************** |
| p4 | [RW] |
***************************************************************************
Instance methods *************************************************************************** |
| seq | [RW] |
***************************************************************************
Instance methods *************************************************************************** |
| spec | [RW] |
***************************************************************************
Instance methods *************************************************************************** |
| table | [RW] |
***************************************************************************
Instance methods *************************************************************************** |
# File p4table.rb, line 315
315: def P4Record.create( p4, table )
316: id = P4RecId.next( p4, table )
317: rec = P4Record.new( p4, table, id )
318: rec.spec = p4.fetch_job( id.to_s )
319: return rec
320: end
# File p4table.rb, line 325
325: def P4Record.exists?( p4, id )
326: jobs = p4.run_jobs( "-e", "job=" + id.to_s )
327: return jobs.length > 0
328: end
# File p4table.rb, line 268
268: def P4Record.load( p4, table, id )
269:
270: if ( ! P4Record.exists?( p4, id ) )
271: raise( RuntimeError, "Record #{id.to_s} does not exist", caller )
272: end
273:
274: rec = P4Record.new( p4, table, id )
275: rec.spec = p4.fetch_job( id.to_s )
276: if rec.spec.has_key?( "files" )
277: rec.spec[ "files" ].each do
278: |file|
279: name = file.sub( /.*\//, "" ).chomp
280: f = P4RecFile.new( p4, name, rec )
281: f.exists = true
282: f.depot_path = file.chomp
283: rec.files[ name ] = f
284: end
285: end
286: rec.exists = true
287: return rec
288: end
# File p4table.rb, line 333
333: def initialize( p4, table, id )
334: @p4 = p4
335: @id = id
336: @seq = id.seq
337: @table = table
338: @spec = nil
339: @exists = false
340: @files = Hash.new
341:
342: @files[ "meta" ] = P4RecFile.new( @p4, "meta", self )
343: end
# File p4table.rb, line 293
293: def P4Record.query( p4, table, expr )
294: expr = "job=#{table} & ( " + expr + " )"
295: p4.run_jobs( "-e", expr ).collect do
296: |job|
297: rec = P4Record.new(p4, table, P4RecId.new_from_job( p4,job["Job"]))
298: rec.spec = job
299: rec.spec[ "files" ].each do
300: |file|
301: name = file.sub( /.*\//, "" ).chomp
302: f = P4RecFile.new( p4, name, id )
303: f.exists = true
304: f.depot_path = file
305: rec.files[ name ] = f
306: end
307: rec.exists = true
308: rec
309: end
310: end
# File p4table.rb, line 418
418: def abandon
419: each_file do
420: |f|
421: fs = p4.run_fstat( f.ws_path )
422: if ( fs && fs[ "action" ] == "add" )
423: File.unlink( f.ws_path )
424: end
425: p4.run_revert( f.depot_path )
426: end
427: end
# File p4table.rb, line 392
392: def add_file( name )
393: if ( name == "meta" )
394: raise( RuntimeError, "The meta file already exists.", caller )
395: end
396:
397: nfile = P4RecFile.new( p4, name, self )
398: nfile.add
399: @files[ "name" ] = nfile
400: end
# File p4table.rb, line 470
470: def delete( desc )
471: if ( ! exists? )
472: raise( RuntimeError, "Can't delete. Record doesn't exist.", caller )
473: end
474:
475: @files.values.each { |f| f.delete }
476: change = p4.fetch_change
477: change[ "Description" ] = desc
478: p4.submit_spec( change )
479: p4.run_job( "-d", @spec[ "Job" ] )
480: @files = Hash.new
481: @spec[ "files" ] = Array.new
482: @exists = false
483: end
# File p4table.rb, line 432
432: def file_list
433: @files.values.collect do
434: |f|
435: f.depot_path
436: end.compact.join( "\n" )
437: end
# File p4table.rb, line 370
370: def get_file( name )
371: return @files[ name ] if @files.has_key?( name )
372: raise( RuntimeError, "Record contains no file called #{name}", caller )
373: end
# File p4table.rb, line 513
513: def method_missing( meth, *args )
514: meth = meth.to_s
515: raise if ( meth[0..0] != "_" )
516: meth = meth[ 1..-1 ]
517: if ( meth =~ /^(.*)=$/ )
518: meth = $1
519: @spec[ meth ] = args.shift
520: elsif ( args.length == 0 && @spec.has_key?( meth ) )
521: @spec[ meth ]
522: else
523: ""
524: end
525: end
# File p4table.rb, line 489
489: def obliterate
490: if ( ! exists? )
491: raise( RuntimeError, "Can't oblit. Record doesn't exist.", caller )
492: end
493:
494: args = @files.values.collect { |f| f.depot_path }
495: el = p4.exception_level?
496: begin
497: p4.exception_level = 1
498: p4.run_sync( args.collect { |a| a += "#none" } )
499: ensure
500: p4.exception_level = el
501: end
502: p4.run_obliterate( "-y", args )
503: p4.run_job( "-d", @spec[ "Job" ] )
504: @spec[ "files" ] = Array.new
505: @files = Hash.new
506: @exists = false
507: end
# File p4table.rb, line 405
405: def rm_file( file )
406: if ( file == "meta" )
407: raise( RuntimeError, "You can't delete the meta file", caller )
408: end
409:
410: f = get_file( file )
411: f.delete
412: @files.delete( file )
413: end
# File p4table.rb, line 443
443: def save( desc )
444: # First rewrite the files list in case it's been modified
445: @spec[ "files" ] = file_list
446:
447: # Next update the job with the values in the spec
448: p4.save_job( @spec )
449:
450: # Now update the metafile with the job -o output
451: if ( exists? )
452: metafile.edit
453: else
454: metafile.add
455: end
456:
457: metafile.write( p4.format_job( @spec ) )
458:
459: # Now submit
460: change = p4.fetch_change
461: change[ "Description" ] = desc
462: p4.submit_spec( change )
463:
464: @exists = true
465: end