7 die "usage: $0 [max_changelist]\n\tProcess change lists and automatically push appropriate ones to the stage label\n" if (@ARGV > 1 || !($ARGV[0] =~ /^\d+$/));
9 # ======================================================================
10 # set up global constants
12 my $counter = "swg-stage-counter";
13 my $label = "swg-stage-label";
14 my $group = "swg_stage_group";
16 # ======================================================================
18 my $maxChangeList = shift;
19 if (!defined $maxChangeList)
21 open(P4
, "p4 counter change |") || die "$0: p4 review failed";
22 $maxChangeList = <P4
>;
27 # get the list of changelists to review
28 open(P4
, "p4 review -t $counter |") || die "$0: p4 review failed";
32 # bail out fast if there are no new change lists
35 print STDERR
"No new changelists, done.\n";
39 # get the stage group membership from perforce
41 open(P4
, "p4 group -o $group |") || die "$0: p4 group failed";
54 # process all change lists
59 # process this submitted change list
66 ($junk, $changeList, $user, $rest) = split;
69 # keep to out max changelist
70 last if ($changeList > $maxChangeList);
72 # read the change description
73 open(P4
, "p4 -ztag describe -s $changeList |") || die "$0: p4 change failed";
78 # check if this change list should go to stage
79 my $update = defined($stageUsers{$user}) ?
1 : 0;
80 $update = 1 if (grep /\[stage\]/i, @describe);
81 $update = 0 if (grep /\[no[ _]*stage\]/i, @describe);
89 $file = $_ if (s/^\.\.\.\s+depotFile\d+\s+// && (m
%^//depot
/swg/current
/data/% || m
%^//depot
/swg/current
/dsrc/%));
90 if (defined $file && s/^\.\.\.\s+rev\d+\s+//)
98 print STDERR
"\t$changeList [stage] $user ($update files)\n";
102 print STDERR
"\t$changeList [no stage] $user\n";
106 # see if we need to update any files
107 my $sync = scalar keys %sync;
110 # figure out my perforce user name
112 open(P4
, "p4 info |");
116 $userName = $_ if (s/User name: //);
120 # check who owns the label
123 open(P4
, "p4 label -o $label |");
127 if (/^Owner:\t/ && $_ ne "Owner:\t$userName")
129 $_ = "Owner:\t$userName";
136 # make me the owner of the label if I wasn't already
139 open(P4
, "| p4 label -i > nul");
148 print STDERR
"Updating the label... (", $sync, " files)\n";
149 open(P4
, "| p4 -x - labelsync -l $label > nul") || die "$0: labelsync failed\n";
150 foreach (sort keys %sync)
152 print P4
$_, "#", $sync{$_}, "\n";
155 my $elapsed = time - $start;
156 print STDERR
"Update took ", $elapsed, " seconds\n";
159 # update the counter to the last processed change list
160 system("p4 counter $counter $changeList > nul") == 0 || die "$0: counter update failed\n";
162 print STDERR
"Stage label update complete to changelist $changeList.\n";