diff options
Diffstat (limited to 'el_GR.ISO8859-7/share/tools/checkupdate')
-rw-r--r-- | el_GR.ISO8859-7/share/tools/checkupdate/Makefile | 15 | ||||
-rw-r--r-- | el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.1 | 146 | ||||
-rw-r--r-- | el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.py | 524 |
3 files changed, 0 insertions, 685 deletions
diff --git a/el_GR.ISO8859-7/share/tools/checkupdate/Makefile b/el_GR.ISO8859-7/share/tools/checkupdate/Makefile deleted file mode 100644 index 92b8e4e1b0..0000000000 --- a/el_GR.ISO8859-7/share/tools/checkupdate/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# $FreeBSD$ - -SCRIPTS= checkupdate -MAN= checkupdate.1 - -CLEANFILES= ${SCRIPTS} - -BINDIR?= ${HOME}/bin - -.SUFFIXES: .py - -.py: - cat ${.ALLSRC} > ${.TARGET} - -.include <bsd.prog.mk> diff --git a/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.1 b/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.1 deleted file mode 100644 index a81d9e21ed..0000000000 --- a/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.1 +++ /dev/null @@ -1,146 +0,0 @@ -.\" Copyright (c) 2007 Giorgos Keramidas <keramida@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$ -.\" -.Dd July 9, 2008 -.Dt CHECKUPDATE 1 -.Os -.Sh NAME -.Nm checkupdate -.Nd "check a translation of the FreeBSD doc/ tree for source updates" -.Sh SYNOPSIS -.Nm -.Op Fl acenpPqtv -.Op Fl R Ar workspace -.Sh DESCRIPTION -The -.Nm -utility checks a translation of the FreeBSD -.Pa "doc/" -tree for source updates, i.e.\& changes in their original English source -files which may be interesting to merge. -.Pp -The list of files to check can be specified in the command-line of the -.Nm -utility, or it can be fed to the script through its standard input -stream. -.Pp -The number of checks performed, and the format of the script output are -controlled by command-line options. -.Pp -The options are as follows: -.Bl -tag -width ".Fl f Ar flist" -.It Fl a -Enable all file checks for each input file. -.It Fl c -Generate compact report primarily suitable for commit logs. It will -only contain revision difference information and names of the affected -files. This will automatically disable -.Dq patch preview -mode. -.It Fl e -Report everything. -File revision information is displayed for all the files of our input -list, and not just the files that actually need to be updated. -.It Fl n -Disable all file checks. -.It Fl p -Run in -.Dq patch preview -mode. -Whenever a difference is found in the revisions of the original -translated file and the current English revision, show a patch of the -untranslated changes. -.It Fl P -Do not be so -.Dq picky -and show all the information even if files do not contain tags. It is -disabled by default and it is not recommended to use. -.It Fl q -Run in -.Dq quiet -mode. -No status messages are printed in the standard error stream of the -script, and if there are no updates to show its standard output shows -nothing at all. -This mode is useful for -.Xr crontab 5 -entries, where it's ok to run without any output at all, to avoid -spurious email messages from -.Xr cron 8 . -.It Fl R Ar workspace -Switch to another -.Ar workspace -path before checking file translation updates. -The -.Nm -script assumes that it runs in the toplevel directory of the -.Fx -.Pa doc/ -tree. -If this is not true, then the -.Fl R -option should be used to point to the toplevel directory of the -.Pa doc/ -tree. -.It Fl t -Run in -.Dq tuple mode . -This option implies -.Fl e -too. -When the script runs in tuple mode it prints Python tuples with the file -information it collects for all the files, instead of parsing and -presenting the information in human readable format. -This may be a bit useful for post-processing the output of the script to -generate output in different ways. -.It Fl v -Bump verbosity level. -The -.Nm -script runs in -.Dq quiet mode -by default. -The -.Fl v -option increases the verbosity level, and it can be used multiple times -for extra verbosity. -.El -.Sh EXIT STATUS -.Ex -std -.Sh SEE ALSO -.Xr python 1 , -.Xr crontab 5 , -.Xr cron 8 -.Sh HISTORY -The -.Nm -utility first appeared in -.Fx 7.0 . -.Sh AUTHORS -This manual page was written by -.An Giorgos Keramidas Aq keramida@FreeBSD.org . -.Sh BUGS -The actual code for this utility is vaporware. diff --git a/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.py b/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.py deleted file mode 100644 index 7f4c45d789..0000000000 --- a/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.py +++ /dev/null @@ -1,524 +0,0 @@ -#!/usr/bin/env python - -#- -# Copyright (c) 2007 Giorgos Keramidas <keramida@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$ - -""" -The translation helper utility `checkupdate'. - -To use this utility, you have to check out a clean copy of the doc/ tree -of FreeBSD which includes at least the following subdirectories: - - el_GR.ISO8859-7 - en_US.ISO8859-1 - share - -Then you can feed a list of files (flist) from the `el_GR.ISO8859-7' -part of the tree to the standard input of this script, and it will try -to print a report of updates which may be useful to merge from `en_US' -to `el_GR'. - -NOTE: The `checkupdate' script depends on manually maintained `%SOURCE%' -and `%SRCID%' comments in the `el_GR' part of the tree, to work -correctly. It does not maintain the comments/tags itself, though. - -NOTE: If you use relative pathnames, make sure they are relative to the -root of the doc/ tree, and that you run the script from the toplevel -directory or that you correctly pass the -R option with the doc/ -workspace path. -""" - -import errno -import getopt -import os -import re -import sys -import subprocess - -# Alias some functions from other modules, to shorter, easier to use names. -exit = sys.exit - -# Save the invocation name of the script, for later use. -progname = os.path.basename(sys.argv[0]) - -# -------------------- script options ---------------------------------- - -allchecks = None # All the file check functions we support. -checks = None # No checks are done by default. -patchmode = False # Show patches that need translation. -root = "." # The default workspace directory. -verbose = None # Run in `quiet' mode by default. -everything = False # Report everything, i.e. all input files. -tuplemode = False # Use the standard output mode -compactmode = False # Generate compact stdout suitable for commit logs. -pickymode = True # Skip files without '%SRCID%' and '%SOURCE%' (default). - -# -------------------- useful functions -------------------------------- - -def message(msg=None): - """Print an optional `msg' message string to our standard error - stream. Note that a newline is appended automatically to the - message string, as if it was displayed with print(), and no - exceptions are captured by message().""" - if msg: - s = "%s\n" % (msg) - sys.stderr.write(s) - sys.stderr.flush() - return None - -def error(code, msg=None): - """Print `msg' as an optional error message string, and die with an - error of `code'.""" - if msg: - s = '%s: error: %s' % (progname, msg) - message(s) - exit(code) - -def warning(msg=None): - """Print `msg' as an optional warning string.""" - if msg: - s = '%s: warning: %s' % (progname, msg) - message(s) - return None - -def debug(level=1, msg=None): - """Print an optional debugging message `msg', when the verbosity - level `verbose' of the script exceeds or is equal to `level' - (default=1).""" - if verbose and verbose >= level and msg: - message("# " + msg) - -def setroot(path): - """Change the `root' of the workspace we are going to use to `path'. - The `path' directory must alredy exist, and be accessible to the - user running the script.""" - - global root # Declare global scope for `root' - if os.path.exists(path): - root = path - debug(1, "Workspace = `%s'" % root) - return root - else: - return None - -def freebsdrevision(fname): - """Parse the `fname' file, looking for an instance of the FreeBSD - CVS ID line, extract the revision number from the ID line, and - return it as a string. Multiple matches are ok, as long as their - revision ID and dates match precisely each other. - - FreeBSD is progressively switching its repositories from CVS to - Subversion. This function tries to DTRT with both CVS and - Subversion ID lines, so it may not be 100% right at all times. - - The old-style CVS ID lines look like this: - - $\FreeBSD: src/bin/rcp/rcp.c,v 1.46 2007/05/22 04:21:00 cperciva Exp $ - - The new-style Subversion ID lines look like this: - - $\FreeBSD: head/bin/rcp/rcp.c 169848 2007-05-22 04:21:00Z cperciva $ - - The freebsrevision() function first tries to match the CVS format for - each line, and if that fails it tries the Subversion format. If one - of these formats matches, then it extracts the revision number and - it returns it. If none matches, then it just returns `None' to show - that there is no matching ID line.""" - - if not fname: - return None - - # There isn't much we can do with a directory path. - if os.path.isdir(fname): - debug(2, "No FreeBSD ID line for directory `%s'" % fname) - return None - - try: - cvsre = re.compile(r'^.*\$\FreeBSD:\s+\S+,v\s+(\d+(?:\.\d+){1,})\s+(?:d{2}|\d{4})/\d{2}/\d{2}\s+\d{2}:\d{2}:\d{2}\s+\S+\s+Exp\s+\$.*$') - svnre = re.compile(r'^.*\$\FreeBSD:\s+\S+\s+(\d+)\s+\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}Z\s+\S+\s+\$.*$') - except Exception, inst: - warning("invalid regular expression: %s" % inst) - return (None, None) - - rev = None - try: - debug(3, "Finding FreeBSD revision number of file `%s'" % fname) - for l in file(fname): - m = cvsre.match(l) or svnre.match(l) - if m: - nrev = m.group(1) - if rev and rev != nrev: - debug(3, "Multiple revision numbers (%s and %s) found in file `%s'" % (rev, nrev, fname)) - return None - rev = nrev - except IOError, inst: - if inst.errno == errno.ENOENT: - debug(3, "%s: cannot open file for reading" % fname) - return None - except Exception, inst: - debug(3, "%s: cannot extract revision number: %s" % (fname, str(inst))) - return None - if not rev: - debug(3, "FreeBSD revision not found in file `%s'" % fname) - return rev - -def fileinfo(fname): - """Extract the `%%SOURCE%%' and `%%SRCID%%' info from file `fname'. - The `fname' file should be accessible for reading. It will be - opened for read and every line will be matched with the `%%SOURCE%%' - and `%%SRCID%%' patterns. There should be only one occurence of - these patterns in the file. Multiple matches will trigger an error.""" - - if not fname: - return None - - # There isn't much we can do with a directory path. - if os.path.isdir(fname): - debug(2, "Skipping directory `%s'" % fname) - return (None, None) - - # The regexps to match %SOURCE% and %SRCID% in our input file. - try: - srcre = re.compile(r'^.*(%SOURCE%)\s+(\S+)\s*$') - srcidre = re.compile(r'^.*(%SRCID%)\s+(\S+)\s*$') - except Exception, inst: - warning("invalid regular expression: %s" % inst) - return (None, None) - - # No file info obtained yet. - info = (None, None, None, None, None, None) - src, srcid = (None, None) - try: - debug(3, "Finding %%SOURCE%% and %%SRCID%% info of file `%s'" % fname) - - for l in file(fname): - l = l.rstrip('\r\n') - nsrc = None - m = srcre.match(l) - if m: - nsrc = m.group(2) - # Validate the `%SOURCE%' path, to avoid false matches with - # `%SOURCE%' tags in comments or documentation. This isn't - # exactly a perfect validation check, but it should catch most - # of the common cases. - if nsrc and ('/' in nsrc or os.path.exists(nsrc)): - if src: - warning("multiple %%SOURCE%% tags in file %s" % fname) - src = nsrc - debug(4, "%%SOURCE%% matched %s in line: %s" % (fname, l)) - # Check for an `%SRCID%' match. - # - # XXX: This doesn't really validate the resulting `%SRCID%' value - # XXX: as a CVS or Subversion revision. We should probably add - # XXX: a few checks here. - nsrcid = None - m = srcidre.match(l) - if m: - nsrcid = m.group(2) - if srcid: - warning("multiple %%SRCID%% tags in file %s" % fname) - srcid = nsrcid - debug(4, "%%SRCID%% matched %s in line: %s" % (fname, l)) - except IOError, inst: - if inst.errno == errno.ENOENT: - warning("%s: cannot open file for reading" % fname) - return info - except Exception, inst: - warning("%s: cannot extract SOURCE and SRCID info" % fname) - return info - if not src: - debug(3, "%%SOURCE%% not found in file `%s'" % fname) - if not srcid: - debug(3, "%%SRCID%% not found in file `%s'" % fname) - - fid, newsrcid = map(freebsdrevision, (fname, src)) - srcexists = src and os.path.exists(src) - info = (fname, fid, src, srcexists, srcid, newsrcid) - return info - -def reportfile(fname, frev, srcfile, srcexists, srcid, srcrev): - """Report that an update is needed for a translated file.""" - - if not compactmode: - text = "%s%s" % (fname, frev and " rev. " + str(frev) or "") - revtext = "%-10s -> %-10s" % (srcid or "NO-%SRCID%", srcrev or "NONE") - if not compactmode: - if srcfile and not srcexists: - filetext = "%s (MISSING)" % srcfile - elif srcfile: - filetext = "%s" % srcfile - else: - filetext = "NO-%SOURCE%" - - if compactmode: - print "%s %s" % (revtext, fname) - else: - print "%s" % text - print " %s %s" % (revtext, filetext) - print "" - -def showdiff(fname, frev, srcfile, srcexists, srcid, srcrev): - """Show differences in the original file.""" - - if not (srcfile and srcexists and srcid and srcrev): - # Raise an exception? - print " No patch could be retrieved." - print "" - return None - - cvsdiff = ["cvs", "-R", "diff", "-u", - "-r%s" % srcid, "-r%s" % srcrev, "%s" % srcfile] - - svndiff = ["svn", "diff", - "-r", "%s:%s" % (srcid, srcrev), "%s" % srcfile] - - diffargs = None - if os.path.isdir(root + "/CVS"): - diffargs = cvsdiff - elif os.path.isdir(root + "/.svn"): - diffargs = svndiff - - if not diffargs: - print " Not a Subversion or CVS checkout." - print "" - return None - - diffcmd = "" - - for arg in diffargs: - diffcmd += (arg + " ") - - print " Patch review for:" - print " %s" % diffcmd - print "" - - output = subprocess.Popen(diffargs, stdout=subprocess.PIPE, cwd=root).communicate()[0] - - print output - print "" - return True - -def checkinfo(info): - """Check the `info' tuple of file information. The tuple should - have at least six pieces of file information: - - (file-name, greek-revision, - english-file, english-file-exists?, - last-translated-revision, current-revision) - - These are all the bits we need for basic `update' checking.""" - - fname = None # Translated file path - frev = None # Translated file revision - srcfile = None # English source file path - srcexists = None # Does the English source file exist? - srcid = None # `%SRCID%' value from translated file - srcrev = None # English file revision - - try: - (fname, frev, srcfile, srcexists, srcid, srcrev) = \ - info - except ValueError: - warning("Invalid file info: %s" % str(info)) - return None - - if not fname: - debug(2, "No translated file in info: %s" % str(info)) - return None - - # Report all files, if `everything' is enabled. - if everything: - reportfile(fname, frev, srcfile, srcexists, srcid, srcrev) - return True - - # If a file has an fname and only one of srcfile but no srcid or - # srcrev, then we report it because it seems 'odd' to have only a - # `%SOURCE%' tag. - if srcfile and (not srcid or not srcrev): - reportfile(fname, frev, srcfile, srcexists, srcid, srcrev) - return True - - # Similarly, if a file only has srcid, we report it. - if srcid and (not srcfile or not srcrev): - reportfile(fname, frev, srcfile, srcexists, srcid, srcrev) - return True - - # The same if a file only has srcrev. - if srcrev and (not srcfile or not srcid): - reportfile(fname, frev, srcfile, srcexists, srcid, srcrev) - return True - - # There is no frev, srcid, srcrev so do not report (has no sense). - if (pickymode and not everything) and (not srcid and not srcrev and not frev): - return None - - # There is no srcid, srcrev, may be the user does not want to track - # this file. - if (pickymode and not everything) and (not srcid and not srcrev): - return None - - # If one of srcid, srcrev is unavailable, we report it. - if not srcid or not srcrev: - reportfile(fname, frev, srcfile, srcexists, srcid, srcrev) - return True - - # Finally, if we have both srcrev, srcid, report only the files that - # have different values for these two. - if srcid != srcrev: - reportfile(fname, frev, srcfile, srcexists, srcid, srcrev) - if patchmode: - return showdiff(fname, frev, srcfile, srcexists, srcid, srcrev) - return True - - return None - -def processfile(fname): - """Process a single file, looking for updates and any other checks - we have enabled for all the files.""" - - if not fname: - return None - - debug(2, "Processing file `%s'" % fname) - if os.path.isdir(fname): - # We don't do anything with directories. Symlinks and other - # files which stand a chance of being readable as plain text are - # ok, but directories don't really make sense here, so skip them. - debug(2, "Skipping directory `%s'" % fname) - return None - - retval = None - info = fileinfo(fname) - if info: - r = fname - if tuplemode: - print info - else: - checkinfo(info) - return retval - -def usage(): - """Print a usage message, and exit.""" - print "usage: %s [-acenpPqtv] [-R workspace]" % progname - exit(1) - -# -------------------- main script body -------------------------------- - -if __name__ == "__main__": - debug(3, "Parsing script options") - try: - opts, args = getopt.getopt(sys.argv[1:], 'acenpPqtR:v') - except getopt.GetoptError, err: - usage() - - # Go through the list of command-line options, and tune the globals - # which affect the behavior of the script accordingly. - for o, v in opts: - if o == '-a': - debug(3, "Enabling all file checks") - checks = allchecks # All file checks enabled. - elif o == '-c': - debug(3, "Compact mode on") - compactmode = True # Generate compact report. - patchmode = False # No previews allowed. - elif o == '-e': - debug(3, "Reporting file revision info for everything") - everything = True - elif o == '-n': - debug(3, "Disabling all file checks") - checks = None # No file checks enabled. - elif o == '-p': - if not compactmode: - debug(3, "Enabling patch preview mode") - patchmode = True# Show diffs for files to be merged. - else: - debug(3, "No patch preview due to compact mode") - elif o == '-P': - debug(3, "Disabling picky mode") - pickymode = False # Picky mode: no check if no revision. - elif o == '-q': - debug(3, "Going into quiet mode.") - verbose = False # Quiet mode; no verbose messages. - elif o == '-R': - debug(3, "Switching to workspace at `%s'" % v) - if not setroot(v): - error(1, "Directory `%s' does not exist" % v) - elif o == '-t': - debug(3, "Output formatted as tuples") - tuplemode = True - elif o == '-v': - verbose = verbose and (verbose + 1) or 1 - debug(1, "Bumping verbosity level to %d" % verbose) - else: - assert False, "Unhandled option `%s'" % o - - # If the root directory is merely '.', convert it to a full pathname. - if root == '.': - try: - root = os.getcwd() - except Exception, inst: - error(1, "Cannot save working directory: %s" % str(inst)) - exit(1) - debug(2, "Normalized workspace root = `%s'" % root) - - # Save the current working directory. - savedpath = None - try: - savedpath = os.getcwd() - except Exception, inst: - error(1, "Cannot save working directory: %s" % str(inst)) - exit(1) - - # Switch into the workspace `root'. - try: - os.chdir(root) - except Exception, inst: - error(1, "Cannot switch to workspace root `%s'" % str(inst)) - exit(1) - debug(3, "Current working directory = `%s'" % os.getcwd()) - - # Read a list of files from stdin, and process them. - try: - for l in sys.stdin.readlines(): - fname = l.rstrip('\r\n') - processfile(fname) - except KeyboardInterrupt: - message("%s: Interrupted." % progname) - exit(1) - except Exception, inst: - error(1, "%s" % str(inst)) - - # Restore the working directory we had before processing files. - if savedpath: - try: - os.chdir(savedpath) - except Exception, inst: - error(1, "Cannot restore working directory: %s" % str(inst)) - exit(1) - - # All done. - exit(0) |