Remove scripts and tools which only functioned when src was using CVS
Approved by: cperciva MFC after: 1 week
This commit is contained in:
parent
09c024e1a1
commit
2ab4fdc460
@ -8,8 +8,6 @@ the integrity.
|
||||
|
||||
Please make a subdir per program, and add a brief description to this file.
|
||||
|
||||
ac Various scripts that checks of style/content correctness of
|
||||
committers lists in doc/ area.
|
||||
dumpvfscache program that can be used to examine the contents of the vfs
|
||||
name cache.
|
||||
httpd-error check for Web files which does not exists on your host
|
||||
|
@ -1,9 +0,0 @@
|
||||
Various scripts that checks of style/content correctness of
|
||||
committers lists in doc/ area.
|
||||
|
||||
ac check if the contributors article is in sync with the
|
||||
committers list
|
||||
ent.sh check for ordering/content problems in .ent files (authors.ent,
|
||||
teams.ent, etc)
|
||||
|
||||
$FreeBSD$
|
@ -1,107 +0,0 @@
|
||||
#!/usr/bin/perl -w
|
||||
#
|
||||
# Copyright (c) 2002,2003 Alexey Zelkin <phantom@FreeBSD.org>
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# cknames.pl -- this scripts checks for integrity of person lists
|
||||
# between authors.ent, CVSROOT/access and passwd database
|
||||
# at freefall.freebsd.org
|
||||
#
|
||||
# NOTE: This script is supposed to run at freefall.freebsd.org *only*
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
$debug = 0;
|
||||
$accessfile = "CVSROOT/access";
|
||||
$authorsfile = "doc/en_US.ISO8859-1/share/sgml/authors.ent";
|
||||
|
||||
@cvsroots = qw(
|
||||
/home/ncvs
|
||||
/home/pcvs
|
||||
/home/dcvs
|
||||
);
|
||||
|
||||
$doccvsroot = "/home/dcvs";
|
||||
$cvs_pfx = "cvs -Q -R -d ";
|
||||
$cvs_sfx = " co -p";
|
||||
|
||||
open(PASSWD, 'ypcat passwd |') || die "open passwd data: $!\n";
|
||||
while (<PASSWD>) {
|
||||
($login,undef) = split(/:/);
|
||||
$login =~ s/_//g; # remove _ from usernames since this
|
||||
# character is not allowed in docbook entities
|
||||
print "passwd user: $login\n" if $debug;
|
||||
$users{$login} = 1;
|
||||
}
|
||||
close PASSWD;
|
||||
|
||||
foreach (@cvsroots) {
|
||||
print "$cvs_pfx $_ $cvs_sfx $accessfile\n" if $debug;
|
||||
open (ACCESS, "$cvs_pfx $_ $cvs_sfx $accessfile |") ||
|
||||
die "checkout $accessfile: $!\n";
|
||||
while (<ACCESS>) {
|
||||
chomp;
|
||||
next if /^#/;
|
||||
($accuser, undef) = split /\s/;
|
||||
$accuser =~ s/_//g;
|
||||
print "access user: $accuser\n" if $debug;
|
||||
$access{$accuser} = 1;
|
||||
}
|
||||
close ACCESS;
|
||||
}
|
||||
|
||||
open (AUTHORS, "$cvs_pfx $doccvsroot $cvs_sfx $authorsfile |") ||
|
||||
die "checkout $authorsfile: $!\n";
|
||||
while (<AUTHORS>) {
|
||||
$author = $1 if /ENTITY a\.([^ ]+)/;
|
||||
next if !$author;
|
||||
print "authors entity: $author\n" if $debug;
|
||||
$authors{$author} = 1;
|
||||
$author = "";
|
||||
}
|
||||
close AUTHORS;
|
||||
|
||||
print "\n";
|
||||
print "People listed in CVSROOT/access, but have no account\n";
|
||||
print "----------------------------------------------------\n";
|
||||
foreach (keys %access) {
|
||||
print "$_\n" if (!defined $users{$_});
|
||||
}
|
||||
|
||||
print "\n";
|
||||
print "People listed in autors.ent, not have no account\n";
|
||||
print "------------------------------------------------\n";
|
||||
foreach (keys %authors) {
|
||||
print "$_\n" if (!defined $users{$_});
|
||||
}
|
||||
|
||||
print "\n";
|
||||
print "People listed in CVSROOT/access, but not listed in authors.ent\n";
|
||||
print "--------------------------------------------------------------\n";
|
||||
foreach (keys %access) {
|
||||
print "$_\n" if (!defined $authors{$_});
|
||||
}
|
||||
|
||||
print "\n";
|
@ -1,58 +0,0 @@
|
||||
#!/bin/sh -x
|
||||
# Copyright (c) 2002,2003 Alexey Zelkin <phantom@FreeBSD.org>
|
||||
#
|
||||
# ent.sh -- this script checks {authors,teams}.ent files for correctness
|
||||
#
|
||||
# $FreeBSD$
|
||||
|
||||
: ${CVSROOT=/home/dcvs}
|
||||
prefix=doc/en_US.ISO8859-1/share/sgml
|
||||
cvs='cvs -Q -R co -p'
|
||||
diff='diff -u'
|
||||
tmp=${TMPDIR-/tmp}/_entities
|
||||
|
||||
ckfile() {
|
||||
|
||||
ckf=$1
|
||||
|
||||
$cvs $prefix/$ckf 2>/dev/null |
|
||||
grep ENTITY |
|
||||
awk '{ print $2 }' > $tmp.entsrc
|
||||
sort -u $tmp.entsrc > $tmp.entsrc2
|
||||
$diff $tmp.entsrc $tmp.entsrc2 > $ckf.order
|
||||
|
||||
$cvs $prefix/$ckf 2>/dev/null |
|
||||
perl -ne 'print "$1 -- $2\n" if /ENTITY ([^ ]+).*<email>(.*)<\/email>/' |
|
||||
grep -vi freebsd.org > $ckf.addr
|
||||
|
||||
}
|
||||
|
||||
ckresults() {
|
||||
|
||||
ckf=$1
|
||||
|
||||
if [ -s $ckf.order ]; then
|
||||
echo "Ordering check for $ckf failed. See $ckf.ordering file for details."
|
||||
else
|
||||
rm -f $ckf.order
|
||||
echo "Ordering check for $ckf is Ok. "
|
||||
fi
|
||||
|
||||
if [ -s $ckf.addr ]; then
|
||||
echo "Email addresses for $ckf failed. See $ckf.addr file for details."
|
||||
else
|
||||
rm -f $ckf.addr
|
||||
echo "Email addresses check for $ckf is Ok. "
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
ckfile "authors.ent"
|
||||
ckfile "teams.ent"
|
||||
|
||||
echo
|
||||
|
||||
ckresults "authors.ent"
|
||||
ckresults "teams.ent"
|
||||
|
||||
rm -f $tmp.entsrc $tmp.entsrc2
|
@ -10,8 +10,6 @@ file.
|
||||
|
||||
ansify Convert K&R-style function definitions to ANSI style
|
||||
ath Tools specific to the Atheros 802.11 support
|
||||
backout_commit A tool for reading in a commit message and generating
|
||||
a script that will backout the commit.
|
||||
cfi Common Flash Interface (CFI) tool
|
||||
commitsdb A tool for reconstructing commit history using md5
|
||||
checksums of the commit logs.
|
||||
@ -45,8 +43,6 @@ kerninclude Shellscript to find unused #includes in the kernel.
|
||||
kernxref Shellscript to cross reference symbols in the LINT kernel.
|
||||
kttcp An in-kernel version of the ttcp network performance tool
|
||||
mctest A multicast test program
|
||||
mfc Merge a directory from HEAD to a branch where it does not
|
||||
already exist and other MFC related script(s).
|
||||
mid Create a Message-ID database for mailing lists.
|
||||
mwl Tools specific to the Marvell 88W8363 support
|
||||
ncpus Count the number of processors
|
||||
|
@ -1,350 +0,0 @@
|
||||
#!/usr/bin/env ruby -w
|
||||
|
||||
# $FreeBSD$
|
||||
|
||||
# Please note, that this utility must be kept in sync with
|
||||
# CVSROOT/log_accum.pl. If someone has a different output from their
|
||||
# mail client when saving e-mails as text files, feel free to hack it
|
||||
# in as an option.
|
||||
#
|
||||
# If someone would like to hack in the ability to generate diffs based
|
||||
# off of this script, by all means, be my guest.
|
||||
|
||||
require 'getoptlong'
|
||||
|
||||
$basedir = '/usr'
|
||||
$backout_script = "backout-#{Time.now.strftime("%Y-%m-%d-%H-%M")}.sh"
|
||||
$commit_authors = []
|
||||
$commit_dates = []
|
||||
$commit_file = nil
|
||||
$commit_message = nil
|
||||
$cvsbin = nil
|
||||
$cvs_path = '/usr/bin/cvs'
|
||||
$cvsrc_ignore = true
|
||||
$debug = 0
|
||||
$echo_path = '/usr/bin/echo'
|
||||
$echo_warnings = true
|
||||
$force_script_edit = false
|
||||
$force_remove = false
|
||||
$output = $stdout
|
||||
$quiet_script = false
|
||||
$shell_path = '/bin/sh'
|
||||
$shell_args = '--'
|
||||
|
||||
def debug(level, *msgs)
|
||||
if level <= $debug
|
||||
if $debug > 1
|
||||
$output.puts "DEBUG(#{level}): #{msgs.shift}"
|
||||
else
|
||||
$output.puts msgs.shift
|
||||
end
|
||||
|
||||
for msg in msgs
|
||||
$output.puts "\t #{msg}"
|
||||
end
|
||||
end
|
||||
end # def debug()
|
||||
|
||||
|
||||
def usage(msg, info = nil)
|
||||
out = (msg.nil? ? $stdout : $stderr)
|
||||
out.puts "#{File.basename($0)} usage:" << (msg.nil? ? '' : " #{msg}")
|
||||
out.puts "#{info}" unless info.nil?
|
||||
out.puts ""
|
||||
out.puts " -s, --backout-script=<file> Specifies the filename of the script"
|
||||
out.puts " -D, --basedir=<dir> Specifies the base directory [/usr]"
|
||||
out.puts " -a, --commit-author=<uid> Forces a commit author"
|
||||
out.puts " -d, --commit-date=<date> Forces a commit date"
|
||||
out.puts " -m, --commit-file=<path> Specifies a commit message file"
|
||||
out.puts " -M, --commit-message=<msg> Specifies a commit message"
|
||||
out.puts " -c, --cvs-path=<path> Specifies the CVS binary to be used [cvs]"
|
||||
out.puts " -C, --cvsrc-ignore=<bool> If true, will ignore options in ~/.cvsrc"
|
||||
out.puts " -e, --echo-path=<path> Specifies the path to echo"
|
||||
out.puts " -f, --force-remove=<bool> If true, removes new files [false]"
|
||||
out.puts " -F, --force-edit=<bool> If true, add -C to the shell arguments in"
|
||||
out.puts " the backout script if the shell is sh,"
|
||||
out.puts " which forces an edit of the script"
|
||||
out.puts " -O, --output=<stdio> Specifies what fd to direct the output to"
|
||||
out.puts " -A, --shell-args=<string> Specifies the shell arguments to be used"
|
||||
out.puts " -S, --shell-path=<path> Specifies the shell to be used [/bin/sh]"
|
||||
out.puts " -W, --warnings=<bool> Turns on or off warnings [true]"
|
||||
exit(msg.nil? ? 0 : 1)
|
||||
end
|
||||
|
||||
|
||||
OPTION_LIST = [
|
||||
['--backout-script','-s', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--basedir','-D', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--commit-author','-a', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--commit-date','-d', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--commit-file','-m', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--commit-message','-M', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--cvs-path','-c',GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--cvsrc-ignore','-C',GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--echo-path','-e',GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--force-edit','-F',GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--force-remove','-f',GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--output', '-O', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--quiet-script','-q',GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--shell-args','-A',GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--shell-path','-S',GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--warnings','-w', GetoptLong::REQUIRED_ARGUMENT],
|
||||
]
|
||||
|
||||
opt_parser = GetoptLong.new(*OPTION_LIST)
|
||||
opt_parser.quiet = true
|
||||
|
||||
begin
|
||||
opt_parser.each do |opt,arg|
|
||||
case opt
|
||||
when '--backout-script'
|
||||
debug(3, "backout script was #{$backout_script.inspect} : is #{arg.inspect}")
|
||||
$backout_script = arg
|
||||
when '--basedir'
|
||||
debug(3, "base directory was #{$basedir.inspect} : is #{arg.inspect}")
|
||||
$basedir = arg
|
||||
when '--commit-author'
|
||||
debug(3, "commit author #{arg.inspect} added to list")
|
||||
$commit_authors.push(arg.dup)
|
||||
when '--commit-date'
|
||||
debug(3, "commit date #{arg.inspect} added to list")
|
||||
$commit_date.push(arg.dup)
|
||||
when '--commit-file'
|
||||
debug(3, "commit file was #{$commit_file.inspect} : is #{arg.inspect}")
|
||||
$commit_file = arg
|
||||
when '--commit-message'
|
||||
debug(3, "commit message was #{$commit_message.inspect} : is #{arg.inspect}")
|
||||
$commit_message = arg
|
||||
when '--cvs-path'
|
||||
debug(3, "cvs path was #{$cvs_path.inspect} : is #{arg.inspect}")
|
||||
$cvs_path = arg
|
||||
when '--cvsrc-ignore'
|
||||
if arg =~ /true|yes/i
|
||||
$cvsrc_ignore = true
|
||||
elsif arg =~ /false|no/i
|
||||
$cvsrc_ignore = false
|
||||
else
|
||||
usage("#{opt}: unknown bool format \"#{arg}\"", "Valid options are \"true\", \"false\", \"yes\", or \"no\"")
|
||||
end
|
||||
debug(3, "ignoring of ~/.cvsrc is set to #{$cvsrc_ignore.inspect}")
|
||||
when '--echo-path'
|
||||
debug(3, "echo path was #{$echo_path.inspect} : is #{arg.inspect}")
|
||||
$echo_path = arg
|
||||
when '--force-edit'
|
||||
if arg =~ /true|yes/i
|
||||
$force_script_edit = true
|
||||
elsif arg =~ /false|no/i
|
||||
$force_script_edit = false
|
||||
else
|
||||
usage("#{opt}: unknown bool format \"#{arg}\"", "Valid options are \"true\", \"false\", \"yes\", or \"no\"")
|
||||
end
|
||||
debug(3, "force edit of backout script is set to #{$force_script_edit.inspect}")
|
||||
when '--force-remove'
|
||||
if arg =~ /true|yes/i
|
||||
$force_remove = true
|
||||
elsif arg =~ /false|no/i
|
||||
$force_remove = false
|
||||
else
|
||||
usage("#{opt}: unknown bool format \"#{arg}\"", "Valid options are \"true\", \"false\", \"yes\", or \"no\"")
|
||||
end
|
||||
debug(3, "force removal of files is set to #{$force_remove.inspect}")
|
||||
when '--output'
|
||||
case arg
|
||||
when 'stdout'
|
||||
$output = $stdout
|
||||
when 'stderr'
|
||||
$output = $stderr
|
||||
else
|
||||
usage("#{opt}: unknown output format","Valid outputs are \"stdout\" and \"stderr\"")
|
||||
end
|
||||
debug(3, "output set to #{arg}")
|
||||
when '--quiet-script'
|
||||
if arg =~ /true|yes/i
|
||||
$quiet_script = true
|
||||
elsif arg =~ /false|no/i
|
||||
$quiet_script = false
|
||||
else
|
||||
usage("#{opt}: unknown bool format \"#{arg}\"", "Valid options are \"true\", \"false\", \"yes\", or \"no\"")
|
||||
end
|
||||
debug(3, "quiet script is set to #{$quiet_script.inspect}")
|
||||
when '--shell-args'
|
||||
debug(3, "shell args were #{$shell_args.inspect} : is #{arg.inspect}")
|
||||
$shell_args = arg
|
||||
when '--shell-path'
|
||||
debug(3, "shell path was #{$shell_path.inspect} : is #{arg.inspect}")
|
||||
$shell_path = arg
|
||||
when '--warnings'
|
||||
if arg =~ /true|yes/i
|
||||
$echo_warnings = true
|
||||
elsif arg =~ /false|no/i
|
||||
$echo_warnings = false
|
||||
else
|
||||
usage("#{opt}: unknown bool format \"#{arg}\"", "Valid options are \"true\", \"false\", \"yes\", or \"no\"")
|
||||
end
|
||||
debug(3, "warnings are set to #{$echo_warnings.inspect}")
|
||||
end
|
||||
end
|
||||
rescue GetoptLong::InvalidOption
|
||||
usage("invalid argument")
|
||||
rescue GetoptLong::MissingArgument
|
||||
usage("missing argument")
|
||||
rescue GetoptLong::NeedlessArgument => msg
|
||||
usage("passed an extra argument: #{msg}")
|
||||
end
|
||||
|
||||
debug(3, "Verbosity set to: #{$debug}")
|
||||
|
||||
$cvsbin = $cvs_path
|
||||
$cvsbin << " -f" if $cvsrc_ignore
|
||||
|
||||
if ARGV.length < 1
|
||||
usage("require a commit message to parse")
|
||||
end
|
||||
|
||||
$output.puts("Backout directory:\t#{$basedir}")
|
||||
$output.puts("Backout script:\t\t#{$backout_script}")
|
||||
$output.puts("")
|
||||
|
||||
# Backout script - to be run by hand
|
||||
File.open($backout_script, "w+") do |f|
|
||||
removals = []
|
||||
updates = []
|
||||
files = []
|
||||
|
||||
f.puts("#!#{$shell_path}#{($force_script_edit && $shell_path == '/bin/sh') ? ' -C' : ''} #{$shell_args}")
|
||||
f.puts()
|
||||
f.puts("# Generated at: #{Time.now()}")
|
||||
f.puts("# Generated by: #{ENV['USER']}\@#{ENV['HOST']}")
|
||||
f.puts()
|
||||
f.puts("BASEDIR=#{$basedir}")
|
||||
f.puts('if [ $BASEDIR != $PWD ]; then')
|
||||
f.puts(' echo "Please change to $BASEDIR before running this shell script"')
|
||||
f.puts(' exit 1')
|
||||
f.puts('fi')
|
||||
f.puts()
|
||||
|
||||
author_regexp = Regexp.new(/^([^\ ]+)\s+([\d]{4})\/([\d]{2})\/([\d]{2}) ([\d]{2}):([\d]{2}):([\d]{2}) ([A-Z]{3})$/)
|
||||
file_regexp = Regexp.new(/^ ([\d\.]+)\s+\+([\d]+) \-([\d]+)\s+(.*?)$/)
|
||||
newdead_regexp = Regexp.new(/^(.*?) \((new|dead)\)$/)
|
||||
rev_regexp = Regexp.new(/^ Revision Changes Path$/)
|
||||
|
||||
for email_file in ARGV
|
||||
File.open(email_file) do |e|
|
||||
$output.print("Scanning through #{email_file}...")
|
||||
found_files = false
|
||||
for line in e
|
||||
line.chomp!
|
||||
if found_files == false
|
||||
amd = author_regexp.match(line)
|
||||
if !amd.nil?
|
||||
$commit_authors.push(amd[1].dup)
|
||||
$commit_dates.push(Time.local(*amd[2..7]).dup)
|
||||
elsif rev_regexp.match(line)
|
||||
found_files = true
|
||||
end
|
||||
else # if found_files
|
||||
md = file_regexp.match(line)
|
||||
next if md.nil?
|
||||
|
||||
filename = md[4]
|
||||
ndmd = newdead_regexp.match(filename)
|
||||
if !ndmd.nil?
|
||||
filename = ndmd[1]
|
||||
if ndmd[2] == 'new'
|
||||
removals.push(filename)
|
||||
f.puts("#{$force_remove ? '' : '# '}#{$echo_path} -n \"Removing #{filename}...\"") if !$quiet_script
|
||||
f.puts("#{$force_remove ? '' : '# '}#{$cvsbin} rm -f #{filename}")
|
||||
f.puts("#{$force_remove ? '' : '# '}#{$echo_path} \"done.\"") if !$quiet_script
|
||||
f.puts()
|
||||
files.push(filename)
|
||||
next
|
||||
end
|
||||
end
|
||||
f.puts("#{$echo_path} -n \"Updating #{filename} to #{md[1]}...\"") if !$quiet_script
|
||||
f.puts("#{$cvsbin} up -p -r #{md[1]} #{filename} > #{filename}")
|
||||
f.puts("#{$echo_path} \"done.\"") if !$quiet_script
|
||||
f.puts()
|
||||
files.push(filename)
|
||||
end # if found_files
|
||||
end # for line in..
|
||||
$output.puts("done.")
|
||||
end # File.open()
|
||||
end # for email_file in ARGV...
|
||||
|
||||
if removals.length > 0 && $force_remove == false
|
||||
f.puts("#{$echo_warnings ? '' : '# '}#{$echo_path} \"You may want to remove the following file#{removals.length > 1 ? 's' : ''}:\"")
|
||||
for filename in removals
|
||||
f.puts("#{$echo_warnings ? '' : '# '}#{$echo_path} \"\t#{filename}\"")
|
||||
end
|
||||
f.puts()
|
||||
f.puts("#{$echo_warnings ? '' : '# '}#{$echo_path} \"There is code in #{$backout_script} to remove #{removals.length > 1 ? 'these files' : 'this file'} for you,\"")
|
||||
f.puts("#{$echo_warnings ? '' : '# '}#{$echo_path} \"just uncomment them or pass the option --force-remove=true to #{$0}.\"")
|
||||
end
|
||||
|
||||
f.puts()
|
||||
f.puts("# # # Uncomment the following line to commit the backout.")
|
||||
f.puts("# # #{$echo_path} -n \"Committing backout...\"") if !$quiet_script
|
||||
if !$commit_message.nil?
|
||||
if $commit_message.empty? or $commit_message =~ /^default|no|yes|true|false/i
|
||||
$commit_message = "Backout of commit by #{$commit_authors.join(', ')} done on #{$commit_dates.join(', ')} because\n[___FILL_IN_THE_BLANK___]\n"
|
||||
end
|
||||
|
||||
f.puts()
|
||||
f.puts("# # # EDIT COMMIT MESSAGE HERE")
|
||||
f.puts("CVSCOMMITMSG=<<DONTUSECVSMSG")
|
||||
f.puts($commit_message)
|
||||
f.puts('DONTUSECVSMSG')
|
||||
f.puts()
|
||||
elsif !$commit_file.nil?
|
||||
f.puts("if [ ! -r #{$commit_file} ]; then")
|
||||
f.puts(" #{$echo_path} \"The commit message file #{$commit_file} is not readable,\"")
|
||||
f.puts(" #{$echo_path} \"please fix this and re-run the script.\"")
|
||||
f.puts(" exit 1")
|
||||
f.puts("fi")
|
||||
f.puts()
|
||||
end
|
||||
|
||||
f.print("# # #{$cvsbin} ci")
|
||||
if !$commit_message.nil?
|
||||
f.print(" -m \"$CVSCOMMITMSG\"")
|
||||
elsif !$commit_file.nil?
|
||||
f.print(" -F \"#{$commit_file}\"")
|
||||
end
|
||||
f.puts(" #{files.join(' ')}")
|
||||
|
||||
if !$quiet_script
|
||||
if $commit_message.nil? and $commit_file.nil?
|
||||
f.print("# # #{$echo_path} \"Commit complete. Backout should be complete. Please check to verify.\"")
|
||||
else
|
||||
f.puts("# # #{$echo_path} \"done.\"")
|
||||
end
|
||||
end
|
||||
end # File.open()
|
||||
|
||||
$output.puts()
|
||||
$output.puts("Change to #{$basedir} and run this script. Please look through this script and")
|
||||
$output.puts("make changes as necessary. There are commented out commands available")
|
||||
$output.puts("in the script.")
|
||||
$output.puts()
|
||||
if !$commit_message.nil?
|
||||
$output.puts("If you scroll to the bottom of #{$backout_script} you should be able to")
|
||||
$output.puts("find a HERE document with your commit message, if you would like to make")
|
||||
$output.puts("any further changes to your message.")
|
||||
$output.puts()
|
||||
end
|
||||
if !$commit_file.nil?
|
||||
begin
|
||||
stat = File.stat($commit_file)
|
||||
rescue Errno::ENOENT
|
||||
$output.puts("The output file specified, \"#{$commit_file}\" DOES NOT EXIST!!! Please be sure to")
|
||||
$output.puts("create/edit the file \"#{$commit_file}\" before you run this script")
|
||||
$output.puts()
|
||||
end
|
||||
end
|
||||
$output.puts("Example script usage:")
|
||||
$output.puts("\tmv #{$backout_script} #{$basedir}")
|
||||
$output.puts("\tcd #{$basedir}")
|
||||
$output.puts("\tless #{$backout_script}")
|
||||
$output.puts("\t#{$shell_path} #{$backout_script}")
|
||||
$output.puts("\trm -f #{$backout_script}")
|
||||
$output.puts()
|
@ -1,10 +0,0 @@
|
||||
# $FreeBSD$
|
||||
|
||||
BINDIR?= ${HOME}/bin
|
||||
BINOWN?= `id -u`
|
||||
BINGRP?= `id -g`
|
||||
|
||||
SCRIPTS= mfc.sh
|
||||
MAN= # none
|
||||
|
||||
.include <bsd.prog.mk>
|
@ -1,19 +0,0 @@
|
||||
$FreeBSD$
|
||||
|
||||
Summarize scripts abilities and purposes.
|
||||
|
||||
- mfc.awk: added by jmg
|
||||
|
||||
Takes in a commit message and generates the proper (hopefully) update -j lines
|
||||
and commit line to do the MFC.
|
||||
|
||||
- mfc.sh: added by des
|
||||
|
||||
A simple shell script to help MFC an entire directory to a branch where it
|
||||
does not already exist.
|
||||
|
||||
- mfc.pl: added by flz
|
||||
|
||||
A perl script that takes a message-id, a commit mail or a query string and
|
||||
generates a patchset along with a commit message and a commit script if the
|
||||
user has commit rights.
|
@ -1,33 +0,0 @@
|
||||
#!/usr/bin/awk -f
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
BEGIN {
|
||||
CVSROOT="ncvs:/home/ncvs"
|
||||
UPDATEOPTS="-kk"
|
||||
}
|
||||
|
||||
/^>/ {
|
||||
sub(">[ ]*", "")
|
||||
}
|
||||
|
||||
/^Revision/ || $1 == "" {
|
||||
next
|
||||
}
|
||||
|
||||
{
|
||||
if (sub("1.", "") != 1)
|
||||
next
|
||||
if (!(match($2, "\\+[0-9]") && match($3, "-[0-9]")))
|
||||
next
|
||||
printf("cvs -d %s update %s -j 1.%d -j 1.%d %s\n", CVSROOT, UPDATEOPTS, $1 - 1, $1, $4)
|
||||
files[$4] = 1
|
||||
}
|
||||
|
||||
END {
|
||||
for (i in files)
|
||||
fl = fl " " i
|
||||
printf("cvs -d %s diff -kk %s | less\n", CVSROOT, fl);
|
||||
printf("cvs -d %s commit %s\n", CVSROOT, fl);
|
||||
}
|
@ -1,450 +0,0 @@
|
||||
#! /usr/bin/env perl
|
||||
#
|
||||
# mfc - perl script to generate patchsets from commit mail or message-id.
|
||||
#
|
||||
# Copyright (c) 2006 Florent Thoumie <flz@FreeBSD.org>
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
# This perl scripts only uses programs that are part of the base system.
|
||||
# Since some people use NO_FOO options, here's the list of used programs :
|
||||
# - cvs
|
||||
# - fetch
|
||||
# - perl (with getopt module)
|
||||
# - mkdir, cat, chmod, grep (hopefully everybody has them)
|
||||
# - cdiff or colordiff (optional)
|
||||
#
|
||||
# This script is using 3 environment variables :
|
||||
# - MFCHOME: directory where patches, scripts and commit message will be stored.
|
||||
# - MFCCVSROOT: alternative CVSROOT used to generate diffs for new/dead files.
|
||||
# - MFCLOGIN: define this to your freefall login if you have commit rights.
|
||||
#
|
||||
# TODO: Look for XXX in the file.
|
||||
#
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Env;
|
||||
use Env qw(MFCHOME MFCLOGIN MFCCVSROOT);
|
||||
use Getopt::Std;
|
||||
use IO::Handle;
|
||||
|
||||
my $mfchome = $MFCHOME ? $MFCHOME : "/var/tmp/mfc";
|
||||
my $mfclogin = $MFCLOGIN ? $MFCLOGIN : "";
|
||||
my $cvsroot = $MFCCVSROOT ? $MFCCVSROOT : ':pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs';
|
||||
|
||||
my $version = "1.1.0";
|
||||
my %opt;
|
||||
my $commit_author;
|
||||
my $commit_date;
|
||||
my %mfc_files = ( );
|
||||
my %new_files = ( );
|
||||
my %dead_files = ( );
|
||||
my @msgids = ( );
|
||||
my @logmsg = ( );
|
||||
my @commitmail = ( );
|
||||
my $commiturl;
|
||||
my @prs;
|
||||
my @submitted_by;
|
||||
my @reviewed_by;
|
||||
my @obtained_from;
|
||||
my $cdiff;
|
||||
my $answer;
|
||||
my $mfc_func = \&mfc_headers;
|
||||
|
||||
sub init()
|
||||
{
|
||||
# Enable autoflush of output to always show prompts. Without this,
|
||||
# piping output will fail to display a prompt.
|
||||
autoflush STDOUT 1;
|
||||
|
||||
# Look for pre-requisites.
|
||||
my @reqs = ( "fetch", "cvs", "mkdir", "cat", "chmod", "grep" );
|
||||
my $cmd;
|
||||
foreach (@reqs) {
|
||||
$cmd = `which $_`;
|
||||
die "$_ is missing. Please check pre-requisites." if ($cmd =~ /^$/);
|
||||
}
|
||||
$cdiff = `which cdiff`;
|
||||
$cdiff = `which colordiff` if ($cdiff =~ /^$/);
|
||||
|
||||
# Parse command-line options.
|
||||
my $opt_string = 'bf:hi:m:s:v';
|
||||
getopts( "$opt_string", \%opt ) or usage();
|
||||
usage() if !$opt{i} or $opt{h};
|
||||
@msgids = split / /, $opt{m} if (defined($opt{m}));
|
||||
}
|
||||
|
||||
sub usage()
|
||||
{
|
||||
print STDERR << "EOF";
|
||||
$0 version $version
|
||||
|
||||
Usage: $0 [-v] -h
|
||||
$0 [-vb] -f file -i id
|
||||
$0 [-vb] -m msg-id -i id
|
||||
$0 [-vb] -s query -i id
|
||||
Options:
|
||||
-b : generate a backout patch
|
||||
-f file : commit mail file to use ('-' for stdin)
|
||||
-h : this (help) message
|
||||
-i id : identifier used to save commit log message and patch
|
||||
-m msg-id : message-id referring to the original commit (you can use more than one)
|
||||
-s query : search commit mail archives (a filename with his revision is a good search)
|
||||
-v : be a little more verbose
|
||||
Examples:
|
||||
$0 -m 200601081417.k08EH4EN027418 -i uscanner
|
||||
$0 -s "param.h 1.41" -i move_acpi
|
||||
$0 -f commit.txt -i id
|
||||
$0 -m "200601081417.k08EH4EN027418 200601110806.k0B86m9C054798" -i consecutive
|
||||
|
||||
Please report bugs to: Florent Thoumie <flz\@FreeBSD.org>
|
||||
EOF
|
||||
exit 1;
|
||||
}
|
||||
|
||||
sub previous_revision($)
|
||||
{
|
||||
my ($rev) = @_;
|
||||
my @rev;
|
||||
|
||||
# XXX - I'm not sure this is working as it should.
|
||||
return 0 if ($rev =~ /^1\.1$/);
|
||||
@rev = split '\.', $rev;
|
||||
return undef unless @rev;
|
||||
if (($#rev % 2) != 1) {
|
||||
pop @rev;
|
||||
return join ".", @rev;
|
||||
}
|
||||
if ($rev[-1] == 1) {
|
||||
pop @rev;
|
||||
return &previous_revision(join ".", @rev);
|
||||
} else {
|
||||
$rev[-1]--;
|
||||
return join ".", @rev;
|
||||
}
|
||||
}
|
||||
|
||||
sub fetch_mail($)
|
||||
{
|
||||
my $msgid = $_[0];
|
||||
my $url = "";
|
||||
|
||||
$msgid =~ s/<//;
|
||||
$msgid =~ s/>//;
|
||||
$msgid =~ s/@.*//;
|
||||
|
||||
$url = `fetch -q -o - 'http://www.freebsd.org/cgi/mid.cgi?id=$msgid'| grep getmsg.cgi | head -n 1`;
|
||||
|
||||
if ($url =~ /^$/) {
|
||||
print "No mail found for Message-Id <$msgid>.\n";
|
||||
exit 1;
|
||||
}
|
||||
$url =~ s/.*href="(.*)".*/$1/;
|
||||
$url =~ s/\n$/\+raw/;
|
||||
$url = "http://www.freebsd.org/cgi/$url";
|
||||
return $url;
|
||||
}
|
||||
|
||||
sub search_mail($)
|
||||
{
|
||||
my $query = $_[0];
|
||||
|
||||
$query =~ s/\s+/+/g;
|
||||
|
||||
# XXX - I guess we could take 5 first results instead of just the first
|
||||
# but it has been working correctly for each search I've made so ...
|
||||
my $result = `fetch -q -o - 'http://www.freebsd.org/cgi/search.cgi?words=$query&max=1&sort=score&index=recent&source=cvs-all' | grep getmsg.cgi`;
|
||||
|
||||
$result =~ s/.*href="(.*)">.*/http:\/\/www.freebsd.org\/cgi\/$1+raw/;
|
||||
if ($result =~ /^$/) {
|
||||
print "No commit mail found for '$query'.\n";
|
||||
exit 1;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
sub fetch_diff($)
|
||||
{
|
||||
my $name = $_[0];
|
||||
my $old = $mfc_files{$name}{"from"};
|
||||
my $new = $mfc_files{$name}{"to"};
|
||||
|
||||
# CVSWeb uses rcsdiff instead of cvs rdiff, that's a problem for deleted and new files.
|
||||
# Need to use cvs to generate reversed diff for backout commits.
|
||||
if ($opt{b}) {
|
||||
print " Generating reversed diff for $name using cvs diff...\n";
|
||||
system("cvs -d $cvsroot diff -u -j$new -j$old $name >> $mfchome/$opt{i}/patch 2>/dev/null");
|
||||
} elsif (exists($new_files{$name}) or exists($dead_files{$name})) {
|
||||
print " Generating diff for $name using cvs rdiff...\n";
|
||||
system("cvs -d $cvsroot rdiff -u -r$old -r$new $name >> $mfchome/$opt{i}/patch 2>/dev/null");
|
||||
} else {
|
||||
print " Fetching diff for $name from cvsweb.freebsd.org...\n";
|
||||
system("fetch -q -o - \"http://www.freebsd.org/cgi/cvsweb.cgi/$name.diff?r1=$old&r2=$new\" >> $mfchome/$opt{i}/patch");
|
||||
}
|
||||
}
|
||||
|
||||
sub mfc_headers($)
|
||||
{
|
||||
if ($_[0] =~ /^$/) {
|
||||
$mfc_func = \&mfc_author;
|
||||
} elsif ($_[0] =~ /^(\w+)\s+(\S+\s\S+\s\S+)$/) {
|
||||
# Skipped headers (probably a copy/paste from sobomax MFC reminder).
|
||||
mfc_author($_[0]);
|
||||
} else {
|
||||
if ($_[0] =~ /^Message-Id:\s*(\S+)$/ and ($opt{v} or $opt{s})) {
|
||||
print "Message-Id is $1.\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub mfc_author($)
|
||||
{
|
||||
if (!($_[0] =~ /^(\w+)\s+(\S+\s\S+\s\S+)$/)) {
|
||||
die "Can't determine commit author and date.";
|
||||
}
|
||||
$commit_author = $1;
|
||||
$commit_date = $2;
|
||||
|
||||
print "Committed by $commit_author on $commit_date.\n";
|
||||
|
||||
$mfc_func = \&mfc_modified_files;
|
||||
}
|
||||
|
||||
sub mfc_modified_files($)
|
||||
{
|
||||
if ($_[0] =~ /^\s+Log:/) {
|
||||
$mfc_func = \&mfc_log;
|
||||
} else {
|
||||
# Nothing
|
||||
}
|
||||
}
|
||||
|
||||
sub mfc_log($)
|
||||
{
|
||||
if ($_[0] =~ /^\s*Revision\s+Changes\s+Path\s*$/) {
|
||||
$mfc_func = \&mfc_revisions;
|
||||
} else {
|
||||
push(@logmsg, $_[0]);
|
||||
}
|
||||
}
|
||||
|
||||
sub mfc_revisions($)
|
||||
{
|
||||
my $name;
|
||||
my $rev;
|
||||
my $prev;
|
||||
|
||||
return if ($_[0] =~ /^$/);
|
||||
if (!($_[0] =~ /^\s+(\S+)\s+\S+\s+\S+\s+(\S+)/)) {
|
||||
# Probably two consecutive cut/paste commit mails.
|
||||
$mfc_func = \&mfc_headers;
|
||||
mfc_headers($_[0]);
|
||||
return;
|
||||
} else {
|
||||
$_[0] =~ /\s+(\S+)\s+\S+\s+\S+\s+(\S+)/;
|
||||
$name = $2;
|
||||
$rev = $1;
|
||||
|
||||
$new_files{$name} = undef if ($_[0] =~ /\(new\)$/);
|
||||
$dead_files{$name} = undef if ($_[0] =~ /\(dead\)$/);
|
||||
|
||||
if (defined($mfc_files{$name}{"from"})) {
|
||||
$prev = previous_revision($rev);
|
||||
if ($mfc_files{$name}{"to"} =~ /^$prev$/) {
|
||||
$mfc_files{$name}{"to"} = $rev;
|
||||
} else {
|
||||
die "Non-consecutive revisions found for $name.";
|
||||
}
|
||||
} else {
|
||||
$mfc_files{$name}{"to"} = $rev;
|
||||
$mfc_files{$name}{"from"} = previous_revision($rev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub strip_log(@) {
|
||||
my $tmp;
|
||||
|
||||
while ($#logmsg >= 0 and ($logmsg[$#logmsg] =~ /^\s*$/ or $logmsg[$#logmsg] =~ /^\s\s\w+(\s\w+)*:\s+\w+(\s+\w+)*/)) {
|
||||
$tmp = pop(@logmsg);
|
||||
$tmp =~ s/^\s*//;
|
||||
chomp($tmp);
|
||||
if ($tmp =~ /^PR:\s+(.*)/) {
|
||||
push(@prs, $1);
|
||||
}
|
||||
if ($tmp =~ /^Submitted by:\s+(.*)/) {
|
||||
push(@submitted_by, $1);
|
||||
}
|
||||
if ($tmp =~ /^Reviewed by:\s+(.*)/) {
|
||||
push(@reviewed_by, $1);
|
||||
}
|
||||
if ($tmp =~ /^Obtained from:\s+(.*)/) {
|
||||
push(@obtained_from, $1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub print_epilog {
|
||||
my $tmp;
|
||||
|
||||
if ($#prs >= 0) {
|
||||
$tmp = join(", ", @prs);
|
||||
chomp($tmp);
|
||||
print MSG "PR:\t\t$tmp\n";
|
||||
}
|
||||
if ($#submitted_by >= 0) {
|
||||
$tmp = join(", ", @submitted_by);
|
||||
chomp($tmp);
|
||||
print MSG "Submitted by:\t$tmp\n";
|
||||
}
|
||||
if ($#reviewed_by >= 0) {
|
||||
$tmp = join(", ", @reviewed_by);
|
||||
chomp($tmp);
|
||||
print MSG "Reviewed by:\t$tmp\n";
|
||||
}
|
||||
if ($#obtained_from >= 0) {
|
||||
$tmp = join(", ", @obtained_from);
|
||||
chomp($tmp);
|
||||
print MSG "Obtained from:\t$tmp\n";
|
||||
}
|
||||
}
|
||||
|
||||
init();
|
||||
|
||||
if ($opt{s}) {
|
||||
print "Searching commit mail on www.freebsd.org...\n";
|
||||
$commiturl = search_mail($opt{s});
|
||||
print "Fetching commit mail from www.freebsd.org...\n";
|
||||
@commitmail = `fetch -q -o - $commiturl`;
|
||||
$mfc_func->($_) foreach (@commitmail);
|
||||
strip_log(@logmsg);
|
||||
} elsif ($opt{f}) {
|
||||
open MAIL, $opt{f} || die "Can't open $opt{f} for reading.";
|
||||
@commitmail = <MAIL>;
|
||||
close MAIL;
|
||||
$mfc_func->($_) foreach (@commitmail);
|
||||
strip_log(@logmsg);
|
||||
} else { # $opt{m}
|
||||
foreach (@msgids) {
|
||||
print "Fetching commit mail from www.freebsd.org...\n";
|
||||
$commiturl = fetch_mail($_);
|
||||
@commitmail = `fetch -q -o - $commiturl`;
|
||||
$mfc_func->($_) foreach (@commitmail);
|
||||
strip_log(@logmsg);
|
||||
}
|
||||
}
|
||||
|
||||
die "Doesn't seem you gave me a real commit mail." if ($mfc_func == \&mfc_headers);
|
||||
die "No file affected by commit?" if (scalar(keys(%mfc_files)) == 0);
|
||||
|
||||
# Create directory and truncate patch file.
|
||||
system("mkdir -p $mfchome/$opt{i}");
|
||||
system("cat /dev/null > $mfchome/$opt{i}/patch");
|
||||
|
||||
if ($opt{v} or $opt{s}) {
|
||||
# Print files touched by commit(s).
|
||||
print "Files touched by commit(s):\n";
|
||||
print " ", $_, ": rev ", $mfc_files{$_}{"from"}, " -> ", $mfc_files{$_}{"to"}, "\n" foreach (keys(%mfc_files));
|
||||
}
|
||||
|
||||
if ($opt{s}) {
|
||||
print "Is it the commit you were looking for ? [Yn] ";
|
||||
$answer = <STDIN>;
|
||||
chomp($answer);
|
||||
if ($answer =~ /^[Nn]$/) {
|
||||
print "Sorry that I couldn't help you.\n";
|
||||
exit 0;
|
||||
}
|
||||
}
|
||||
|
||||
# Generating patch.
|
||||
print "Processing patch...\n";
|
||||
fetch_diff($_) foreach (keys(%mfc_files));
|
||||
|
||||
if ($mfclogin) {
|
||||
# Create commit message from previous commit message.
|
||||
print "Processing commit message...\n";
|
||||
# Chop empty lines Template lines like "Approved by: (might be dangerous)".
|
||||
open MSG, "> $mfchome/$opt{i}/msg" || die "Can't open $mfchome/$opt{i}/msg for writing.";
|
||||
if ($opt{b}) {
|
||||
print MSG "Backout this commit:\n\n";
|
||||
} else {
|
||||
print MSG "MFC:\n\n";
|
||||
}
|
||||
|
||||
# Append merged file names and revisions to the commit message.
|
||||
print MSG $_ foreach (@logmsg);
|
||||
if (!$opt{b}) {
|
||||
print MSG "\n";
|
||||
print MSG " ", $_, ": rev ", $mfc_files{$_}{"from"}, " -> ", $mfc_files{$_}{"to"}, "\n" foreach (keys(%mfc_files));
|
||||
}
|
||||
|
||||
# Append useful info gathered from Submitted/Obtained/... lines.
|
||||
print MSG "\n";
|
||||
print_epilog();
|
||||
close MSG;
|
||||
|
||||
# Create commit script.
|
||||
print "Processing commit script...\n";
|
||||
open SCRIPT, "> $mfchome/$opt{i}/script" || die "Can't open $mfchome/$opt{i}/script for writing.";
|
||||
print SCRIPT "#! /bin/sh\n\n";
|
||||
print SCRIPT "# This script has been automatically generated by $0.\n\n";
|
||||
print SCRIPT "export CVSROOT=\"$mfclogin\@ncvs.freebsd.org:/home/ncvs\"\n\n";
|
||||
|
||||
if (scalar(keys(%new_files)) or scalar(keys(%dead_files))) {
|
||||
if (scalar(keys(%new_files))) {
|
||||
print SCRIPT "cvs add";
|
||||
print SCRIPT " \\\n $_" foreach (keys(%new_files));
|
||||
print SCRIPT "\n";
|
||||
}
|
||||
if (scalar(keys(%dead_files))) {
|
||||
print SCRIPT "cvs rm -f";
|
||||
print SCRIPT " \\\n $_" foreach (keys(%dead_files));
|
||||
print SCRIPT "\n";
|
||||
}
|
||||
}
|
||||
|
||||
print SCRIPT "cvs diff";
|
||||
print SCRIPT " \\\n $_" foreach (keys(%mfc_files));
|
||||
if ($cdiff =~ /^$/) {
|
||||
print SCRIPT "\n";
|
||||
} else {
|
||||
print SCRIPT " | $cdiff";
|
||||
}
|
||||
|
||||
print SCRIPT "cvs ci";
|
||||
print SCRIPT " \\\n $_" foreach (keys(%mfc_files));
|
||||
print SCRIPT "\n";
|
||||
|
||||
close SCRIPT;
|
||||
system("chmod a+x $mfchome/$opt{i}/script");
|
||||
}
|
||||
|
||||
print "Done, output directory is $mfchome/$opt{i}/\n";
|
||||
|
||||
exit 0;
|
@ -1,38 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Merge an entire directory from HEAD to a given branch
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
|
||||
if [ $# -eq 1 -a -f CVS/Tag ] ; then
|
||||
set -- "${1}" "$(sed -e 's/^T//' <CVS/Tag)"
|
||||
echo "Assuming branch is $2"
|
||||
fi
|
||||
|
||||
if [ $# -ne 2 ] ; then
|
||||
echo "usage: mfc <dir> <branch>" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dir="${1}"
|
||||
branch="${2}"
|
||||
|
||||
set -e
|
||||
|
||||
# Get sources from HEAD
|
||||
/usr/bin/cvs -f -Q up -kk -Pd -A "${dir}"
|
||||
|
||||
# Fake a cvs add...
|
||||
find "${dir}" -type d -name CVS |
|
||||
while read d ; do
|
||||
echo "${d%/CVS}"
|
||||
|
||||
# Fix up Entries so the files look newly added
|
||||
sed -E -i'' -e \
|
||||
"s|^/([^/]+)/.*|/\1/0/Merged \1 from HEAD//T${branch}|" \
|
||||
"${d}/Entries"
|
||||
|
||||
# Set directory tag
|
||||
echo "T${branch}" >"$d/Tag"
|
||||
done
|
Loading…
Reference in New Issue
Block a user