use strict; my $forceBuild = 0; if ( $ARGV[1] =~ /-forcebuild/ ) { $forceBuild = 1; } # Read in the list of changed maps my $filename = "buildlist.txt"; open(INFILE, $filename); my @maps = ; close( INFILE ); # forcelist.txt allows maps to be manually added to the build. open(INFILE, "forcelist.txt"); my @forcemaps = ; close( INFILE ); my $retval = 1; system( "echo. > $filename" ); system( "echo. > forcelist.txt" ); # Run through the list of maps to see if any should be built for( @maps) { if( /updating (.*)|adding (.*)/ ) { # Check if this map should be built now if ( shouldBuild( $1 ) == 0 ) { next; } # Add this map name to the build list system( "p4 sync -f $1 >> $filename" ); system( "echo Adding to the build list: $1 >> log.txt" ); $retval = 0; } } for( @forcemaps ) { if ( /\.vmf/ ) { # Add this map name to the build list $_ =~ /(.*)/; system( "p4 sync -f $1 >> $filename" ); system( "echo Forcing add to the build list: $1 >> log.txt" ); $retval = 0; } } exit $retval; #----------------------------------- # Check if this map should build now #----------------------------------- sub shouldBuild { my $map = shift; # if command line flag was set, build the map if ( $forceBuild == 1 ) { return 1; } # if the map line contains the force flag, build the map if ( $map =~ /-forcebuild/ ) { return 1; } # Dump the comments from the last checkin of this map system( "p4 changes -m 1 -s submitted -l $map > comments.txt" ); # parse comments for the autocompile keyword open(INFILE, "comments.txt"); my @comments = ; close(INFILE); for( @comments ) { if ( /autocompile/i ) { return 1; } } return 0; }