[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: please unblock twill-0.9-1



>>>>> "Neil" == Neil McGovern <neilm@debian.org> writes:

    Neil> Could you attach the diff please?

Sure. Thanks a lot.

Cheers,
Arnaud Fontaine

diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/debian/changelog twill-0.9/debian/changelog
--- twill-0.9~b1/debian/changelog	2009-01-22 22:39:25.000000000 +0000
+++ twill-0.9/debian/changelog	2009-01-22 22:39:08.000000000 +0000
@@ -1,3 +1,26 @@
+twill (0.9-1) unstable; urgency=low
+
+  [ Arnaud Fontaine ]
+  * New upstream bugfix release.
+  * debian/control:
+    + Add ${misc:Depends} to Depends in case the result of a call to
+      debhelper tools adds extra dependencies.
+    + Drop useless Build-Depends on patchutils.
+    + Bump Standards-Version to 3.8.0.
+      - Add debian/README.source.
+  * debian/doc-base:
+    + Change the section to Programming.
+  * debian/copyright:
+    + Update copyright years.
+    + Reorganize to make copyright information clearer.
+
+  [ Sandro Tosi ]
+  * debian/control:
+    - Uniforming Vcs-Browser field.
+    - Switch Vcs-Browser field to viewsvn.
+
+ -- Arnaud Fontaine <arnau@debian.org>  Wed, 21 Jan 2009 23:54:29 +0000
+
 twill (0.9~b1-2) unstable; urgency=low
 
   [ Arnaud Fontaine ]
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/debian/control twill-0.9/debian/control
--- twill-0.9~b1/debian/control	2009-01-22 22:39:25.000000000 +0000
+++ twill-0.9/debian/control	2009-01-22 22:39:08.000000000 +0000
@@ -4,28 +4,28 @@
 Maintainer: Arnaud Fontaine <arnau@debian.org>
 Uploaders: Debian Python Modules Team <python-modules-team@lists.alioth.debian.org>
 Build-Depends: debhelper (>= 5.0.37.2),
-               cdbs (>= 0.4.43),
+               cdbs (>= 0.4.49),
                python-dev (>= 2.3.5-11),
-               python-support (>= 0.3.2),
-               patchutils (>= 0.2.25),
+               python-support (>= 0.7.1),
                quilt
 Build-Depends-Indep: xsltproc,
                      docbook-xsl,
                      docbook-xml,
-Standards-Version: 3.7.3
+Standards-Version: 3.8.0
 Homepage: http://twill.idyll.org/
 Vcs-Svn: svn://svn.debian.org/python-modules/packages/twill/trunk/
-Vcs-Browser: http://svn.debian.org/wsvn/python-modules/packages/twill/?op=log
+Vcs-Browser: http://svn.debian.org/viewsvn/python-modules/packages/twill/trunk/
 
 Package: python-twill
 Architecture: all
 Depends: ${python:Depends},
+	 ${misc:Depends},
          python-mechanize (>= 0.1.7b-2),
          python-clientform (>= 0.2.6),
          python-pyparsing (>= 1.4.1)
 Recommends: doc-base
 Description: A simple scripting language for Web browsing
  Twill is a simple scripting language intended for programmatic or
- automated browsing of Web sites. It allows allows users to browse the
- Web from a command-line interface. So, you can navigate through Web
- sites that use forms, cookies, and most standard Web features.
+ automated browsing of Web sites. It allows users to browse the Web
+ from a command-line interface. So, you can navigate through Web sites
+ that use forms, cookies, and most standard Web features.
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/debian/copyright twill-0.9/debian/copyright
--- twill-0.9~b1/debian/copyright	2009-01-22 22:39:25.000000000 +0000
+++ twill-0.9/debian/copyright	2009-01-22 22:39:08.000000000 +0000
@@ -5,7 +5,7 @@
 
 Author: C. Titus Brown <titus@caltech.edu>
 
-Copyright (c) 2005-2007 C. Titus Brown <titus@caltech.edu>
+Copyright (c) 2005-2009 C. Titus Brown <titus@caltech.edu>
 
   Permission  is  hereby  granted,  free  of  charge,  to  any  person
   obtaining a copy of this software and associated documentation files
@@ -30,12 +30,154 @@
 In addition of  twill main code, the following  module are distributed
 along with twill under the following licenses:
 
-* twill/other_packages/mechanize/_beautifulsoup.py:
+Files: twill/other_packages/_mechanize_dist/_useragent.py
+       twill/other_packages/_mechanize_dist/_opener.py
+       twill/other_packages/_mechanize_dist/_util.py
+       twill/other_packages/_mechanize_dist/_rfc3986.py
+       twill/other_packages/_mechanize_dist/_request.py
+       twill/other_packages/_mechanize_dist/_auth.py
+       twill/other_packages/_mechanize_dist/_response.py
+       twill/other_packages/_mechanize_dist/_html.py
+       twill/other_packages/_mechanize_dist/_http.py
+  Copyright 2002-2009 John J. Lee <jjl@pobox.com>
+  License:
+
+  This code is free software; you can redistribute it and/or modify it
+  under the terms of the BSD or ZPL 2.1 licenses.
+
+  On Debian systems, the complete text of the BSD License can be found
+  in  `/usr/share/common-licenses/BSD.
+
+  ZPL 2.1 license
+  ---------------
+
+  A copyright notice accompanies this license document that identifies
+  the copyright holders.
+
+  This license  has been  certified as open  source. It has  also been
+  designated as GPL compatible by the Free Software Foundation (FSF).
+
+  Redistribution and use  in source and binary forms,  with or without
+  modification, are  permitted provided that  the following conditions
+  are met:
+
+    1.  Redistributions  in source  code must retain  the accompanying
+        copyright notice,  this list of conditions,  and the following
+        disclaimer.
+
+    2. Redistributions in binary  form must reproduce the accompanying
+       copyright notice,  this list  of conditions, and  the following
+       disclaimer in the documentation and/or other materials provided
+       with the distribution.
+
+    3. Names of  the copyright holders must not be  used to endorse or
+       promote  products  derived  from  this software  without  prior
+       written permission from the copyright holders.
+
+    4. The  right to  distribute this  software or to  use it  for any
+       purpose does not give you the right to use Servicemarks (sm) or
+       Trademarks  (tm)  of the  copyright  holders.  Use  of them  is
+       covered by separate agreement with the copyright holders.
+
+    5. If any files are modified, you must cause the modified files to
+       carry prominent notices stating  that you changed the files and
+       the date of any change.
+
+   Disclaimer
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+  EXPRESSED 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  COPYRIGHT HOLDERS BE
+  LI ABLE 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,  WHET   HER  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.
+
+
+File: twill/other_packages/_mechanize_dist/_clientcookie.py
+
+  Copyright 2002-2009 John J Lee <jjl@pobox.com>
+  Copyright 1997-2009 Gisle Aas (original libwww-perl code)
+  Copyright 2002-2009 Johnny Lee (original MSIE Perl code)
+  License:
+
+  This code is free software; you can redistribute it and/or modify it
+  under the terms of the BSD or ZPL 2.1 licenses.
+
+  On Debian systems, the complete text of the BSD License can be found
+  in  `/usr/share/common-licenses/BSD. The  complete text  of  ZPL 2.1
+  license is available above.
+
+
+Files: twill/other_packages/_mechanize_dist/_pullparser.py
+       twill/other_packages/_mechanize_dist/_lwpcookiejar.py
+       twill/other_packages/_mechanize_dist/_headersutil.py
+       twill/other_packages/_mechanize_dist/_mozillacookiejar.py
+  Copyright 2003-2009 John J. Lee <jjl@pobox.com>
+  Copyright 1997-2009 Gisle Aas (original libwww-perl code)
+  License:
+
+  This code is free software; you can redistribute it and/or modify it
+  under the terms of the BSD or ZPL 2.1 licenses.
+
+  On Debian systems, the complete text of the BSD License can be found
+  in  `/usr/share/common-licenses/BSD. The  complete text  of  ZPL 2.1
+  license is available above.
+
+  On Debian systems, the complete text of the BSD License can be found
+  in  `/usr/share/common-licenses/BSD. The  complete text  of  ZPL 2.1
+  license is available above.
+
+
+File: twill/other_packages/_mechanize_dist/_mechanize.py
+  Copyright 2003-2009 John J. Lee <jjl@pobox.com>
+  Copyright 2003-2009 Andy Lester (original Perl code)
+  License:
+
+  This code is free software; you can redistribute it and/or modify it
+  under the terms of the BSD or ZPL 2.1 licenses.
+
+  On Debian systems, the complete text of the BSD License can be found
+  in  `/usr/share/common-licenses/BSD. The  complete text  of  ZPL 2.1
+  license is available above.
 
-  Copyright: Copyright (c) 2004 Leonard Richardson
 
-  License:  Available  under the  same  terms  as  Python. The  Python
-  license is reproduced below.
+File: twill/other_packages/_mechanize_dist/_msiecookiejar.py
+  Copyright 2002-2009 Johnny Lee <typo_pl@hotmail.com> (MSIE Perl code)
+  Copyright 2002-2009 John J Lee <jjl@pobox.com> (The Python port)
+  License:
+
+  This code is free software; you can redistribute it and/or modify it
+  under the terms of the BSD or ZPL 2.1 licenses.
+
+  On Debian systems, the complete text of the BSD License can be found
+  in  `/usr/share/common-licenses/BSD. The  complete text  of  ZPL 2.1
+  license is available above.
+
+
+File: twill/other_packages/ClientForm.py
+  Copyright 2002-2009 John J. Lee <jjl@pobox.com>
+  Copyright 2005-2009 Gary Poster
+  Copyright 2005-2009 Zope Corporation
+  Copyright 1998-2009 Gisle Aas.
+  License:
+
+  This code is free software; you can redistribute it and/or modify it
+  under the terms of the BSD or ZPL 2.1 licenses.
+
+  On Debian systems, the complete text of the BSD License can be found
+  in  `/usr/share/common-licenses/BSD. The  complete text  of  ZPL 2.1
+  license is available above.
+
+
+File: twill/other_packages/_mechanize_dist/_beautifulsoup.py
+  Copyright (c) 2004-2009 Leonard Richardson
+  License:
 
   PSF LICENSE AGREEMENT FOR PYTHON 2.3
   ------------------------------------
@@ -88,9 +230,10 @@
      agrees to  be bound by the  terms and conditions  of this License
      Agreement.
 
-twill/other_packages/pyparsing.py:
 
-  Copyright (c) 2003-2006  Paul T. McGuire
+File: twill/other_packages/pyparsing.py
+  Copyright (c) 2003-2009  Paul T. McGuire
+  License:
 
   Permission  is  hereby  granted,  free  of  charge,  to  any  person
   obtaining a copy of this software and associated documentation files
@@ -112,55 +255,10 @@
   CONNECTION WITH  THE SOFTWARE  OR THE USE  OR OTHER DEALINGS  IN THE
   SOFTWARE.
 
-twill/other_packages/mechanize:
-
-  Copyright (c) 2002-2004 John J. Lee <jjl@pobox.com>
-  Copyright (c) 2003 Andy Lester
-
-  All rights reserved.
-
-  Redistribution and use  in source and binary forms,  with or without
-  modification, are  permitted provided that  the following conditions
-  are met:
-
-    Redistributions  of source  code must  retain the  above copyright
-    notice, this list of conditions and the following disclaimer.
-
-    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.
-
-    Neither  the name  of  the  contributors nor  the  names of  their
-    employers may be used to  endorse or promote products derived from
-    this software without specific prior written permission.
-
-  THIS SOFTWARE IS PROVIDED  BY THE COPYRIGHT HOLDERS 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
-  COPYRIGHT OWNER 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.
-
-twill/other_packages/ClientForm.py:
-
-  Copyright 2002-2006 John J. Lee <jjl@pobox.com>
-  Copyright 2005 Gary Poster
-  Copyright 2005 Zope Corporation
-  Copyright 1998-2000 Gisle Aas.
-
-  This code is free software; you can redistribute it and/or modify it
-  under the terms of the BSD or ZPL 2.1 licenses.
-
-twill/other_packages/subprocess.py:
 
-  Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se>
+File: twill/other_packages/subprocess.py
+  Copyright (c) 2003-2009 by Peter Astrand <astrand@lysator.liu.se>
+  License:
 
   PSF LICENSE AGREEMENT FOR PYTHON 2.4
   ------------------------------------
@@ -213,7 +311,7 @@
      agrees to  be bound by the  terms and conditions  of this License
      Agreement.
 
-The Debian  packaging is (C) 2007,  Arnaud Fontaine <arnau@debian.org>
-and is licensed under the GPL. On Debian systems, the complete text of
-the    GNU    General    Public    License    can    be    found    in
-`/usr/share/common-licenses/GPL'.
+The   Debian    packaging   is   (C)    2007-2009,   Arnaud   Fontaine
+<arnau@debian.org> and is licensed under the GPL (version 2 or later).
+On Debian systems, the complete text of the GNU General Public License
+can be found in `/usr/share/common-licenses/GPL*'.
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/debian/doc-base twill-0.9/debian/doc-base
--- twill-0.9~b1/debian/doc-base	2009-01-22 22:39:25.000000000 +0000
+++ twill-0.9/debian/doc-base	2009-01-22 22:39:08.000000000 +0000
@@ -3,9 +3,8 @@
 Author: C. Titus Brown <titus@idyll.org>
 Abstract: This documentation describes what is twill and how to use it
  for programming purpose.
-Section: Apps/Programming
+Section: Programming
 
 Format: HTML
 Index: /usr/share/doc/python-twill/html/index.html
 Files: /usr/share/doc/python-twill/html/*.html
-
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/debian/patches/02_remove_ext.patch twill-0.9/debian/patches/02_remove_ext.patch
--- twill-0.9~b1/debian/patches/02_remove_ext.patch	2009-01-22 22:39:25.000000000 +0000
+++ twill-0.9/debian/patches/02_remove_ext.patch	2009-01-22 22:39:08.000000000 +0000
@@ -1,12 +1,88 @@
---- twill-0.9~b1.orig/setup.py
-+++ twill-0.9~b1/setup.py
+Index: twill-0.9/setup.py
+===================================================================
+--- twill-0.9.orig/setup.py	2007-12-28 06:45:16.000000000 +0000
++++ twill-0.9/setup.py	2009-01-19 01:00:23.000000000 +0000
 @@ -18,8 +18,7 @@
        author_email = 'titus@idyll.org',
        license='MIT',
  
 -      packages = ['twill', 'twill.other_packages',
--                  'twill.other_packages.mechanize',
+-                  'twill.other_packages._mechanize_dist',
 +      packages = ['twill',
                    'twill.extensions',
                    'twill.extensions.match_parse'],
  
+Index: twill-0.9/twill/_browser.py
+===================================================================
+--- twill-0.9.orig/twill/_browser.py	2007-12-28 06:45:16.000000000 +0000
++++ twill-0.9/twill/_browser.py	2009-01-19 01:01:30.000000000 +0000
+@@ -3,13 +3,13 @@
+ """
+ 
+ # wwwsearch imports
+-from _mechanize_dist import Browser as MechanizeBrowser
++from mechanize import Browser as MechanizeBrowser
+ 
+ import wsgi_intercept
+ from utils import FixedHTTPBasicAuthHandler, FunctioningHTTPRefreshProcessor
+ 
+ def build_http_handler():
+-    from _mechanize_dist._urllib2 import HTTPHandler
++    from mechanize._urllib2 import HTTPHandler
+ 
+     class MyHTTPHandler(HTTPHandler):
+         def http_open(self, req):
+Index: twill-0.9/twill/browser.py
+===================================================================
+--- twill-0.9.orig/twill/browser.py	2007-12-28 06:45:16.000000000 +0000
++++ twill-0.9/twill/browser.py	2009-01-19 01:00:23.000000000 +0000
+@@ -10,8 +10,9 @@
+ import re
+ 
+ # wwwsearch imports
+-import _mechanize_dist as mechanize
+-from _mechanize_dist import BrowserStateError, LinkNotFoundError, ClientForm
++import mechanize
++import ClientForm
++from mechanize import BrowserStateError, LinkNotFoundError
+ 
+ # twill package imports
+ from _browser import PatchedMechanizeBrowser
+Index: twill-0.9/twill/commands.py
+===================================================================
+--- twill-0.9.orig/twill/commands.py	2007-12-28 06:45:16.000000000 +0000
++++ twill-0.9/twill/commands.py	2009-01-19 01:00:23.000000000 +0000
+@@ -4,9 +4,9 @@
+ """
+ 
+ import sys
+-import _mechanize_dist as mechanize
+-from _mechanize_dist import ClientForm
+-from _mechanize_dist._headersutil import is_html
++import mechanize
++import ClientForm
++from mechanize._headersutil import is_html
+ 
+ OUT=None
+ ERR=sys.stderr
+Index: twill-0.9/twill/utils.py
+===================================================================
+--- twill-0.9.orig/twill/utils.py	2007-12-28 06:45:16.000000000 +0000
++++ twill-0.9/twill/utils.py	2009-01-19 01:00:23.000000000 +0000
+@@ -11,11 +11,11 @@
+ 
+ import subprocess
+ 
+-import _mechanize_dist as mechanize
+-from _mechanize_dist import ClientForm
+-from _mechanize_dist._util import time
+-from _mechanize_dist._http import HTTPRefreshProcessor
+-from _mechanize_dist import BrowserStateError
++import mechanize
++import ClientForm
++from mechanize._util import time
++from mechanize._http import HTTPRefreshProcessor
++from mechanize import BrowserStateError
+ 
+ class ResultWrapper:
+     """
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/debian/README.source twill-0.9/debian/README.source
--- twill-0.9~b1/debian/README.source	1970-01-01 01:00:00.000000000 +0100
+++ twill-0.9/debian/README.source	2009-01-22 22:39:08.000000000 +0000
@@ -0,0 +1,6 @@
+This package  uses quilt to  manage all modifications to  the upstream
+source.   Changes  are  stored  in  the source  package  as  diffs  in
+'debian/patches' and applied during the build.
+
+You can find explanations about quilt usage in the following file:
+/usr/share/doc/quilt/README.source
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/doc/ANNOUNCE-0.9.txt twill-0.9/doc/ANNOUNCE-0.9.txt
--- twill-0.9~b1/doc/ANNOUNCE-0.9.txt	1970-01-01 01:00:00.000000000 +0100
+++ twill-0.9/doc/ANNOUNCE-0.9.txt	2007-12-28 06:45:16.000000000 +0000
@@ -0,0 +1,59 @@
+ANNOUNCING twill v0.9.
+
+twill is a simple language for browsing the Web.  It's designed for
+automated testing of Web sites, but it can be used to interact with
+Web sites in a variety of ways.  In particular, twill supports form
+submission, cookies, redirects, and HTTP authentication.
+
+This release of twill is officially "Pretty Dang Stable".
+
+A twill script to use the "I'm feeling lucky" button on Google looks
+like this:
+
+    setlocal query "twill Python"
+
+    go http://www.google.com/
+
+    fv 1 q $query
+    submit btnI     # use the "I'm feeling lucky" button
+
+    show
+
+(Note that using this script abuses Google's Terms of Service.  So don't.)
+
+You can install the latest release of twill with easy_install,
+
+    easy_install twill
+
+or download this release at
+
+    http://darcs.idyll.org/~t/projects/twill-0.9.tar.gz
+
+Documentation is included in the .tar.gz and is also online at
+
+    http://twill.idyll.org/
+
+Miscellaneous details:
+
+twill is implemented in Python and uses pyparsing and mechanize.  In
+addition to the existing simple command language, twill can easily be
+extended with Python.  twill also provides a fairly simple and
+well-documented wrapper around mechanize.
+
+Note that twill does not understand JavaScript.
+
+---
+
+Significant changes with 0.9:
+
+ - many small bugs were fixed, of course!
+
+ - patched subprocess pipe problem (Chris Abraham).  This fixes problems
+   with long-running twill processes.
+
+ - twill now "plays nice" with other versions of mechanize and ClientForm
+   (good for including it in distributions).
+
+ - Corrected license information => MIT in all files.
+
+ - new 'info' command gives human-readable page summary.
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/doc/ChangeLog twill-0.9/doc/ChangeLog
--- twill-0.9~b1/doc/ChangeLog	2007-03-06 23:00:03.000000000 +0000
+++ twill-0.9/doc/ChangeLog	2007-12-28 06:45:16.000000000 +0000
@@ -1,3 +1,65 @@
+2007-12-27  Titus Brown  <t@iorich.caltech.edu>
+
+	* Added better error message to 'url' (Matt Wilson).
+
+2007-12-23  Titus Brown  <t@iorich.caltech.edu>
+
+	* Updated version to 0.9.
+
+	* Updated license information => MIT in all files, along
+	  with Web link and copyright (Will Maier)
+
+	* Updated tests to work with nose > 0.9.x.
+
+2007-12-04  Titus Brown  <t@iorich.caltech.edu>
+
+	* Fixed iterator double call in wsgi_intercept (Antti Kaihola).
+
+2007-07-02  C. Titus Brown  <t@chreotha>
+
+	* Fixed small documentation error in commands (Bill Mill).
+
+	* Fixed another problem match_parse: made popmatch work properly
+	  (Sheryl).
+
+2007-07-01  C. Titus Brown  <t@chreotha>
+
+	* Moved 'mechanize' to '_mechanize_dist', 'ClientForm' to
+	'_mechanize_dist.ClientForm', as requested for Debian dists.
+
+	* Fixed a problem with __matchlist__ in match_parse extension
+  	  (Sheryl).
+
+	* All raised exceptions now inherit from TwillException (Kevin Turner).
+
+	* Eliminated FakeResponse and switched to using
+	  mechanize.make_response (Jacob Hallan, JJL).
+
+	* Updated mechanize to latest; includes my two patches to mechanize.
+
+2007-06-04  Titus Brown  <t@iorich.caltech.edu>
+
+	* Updated mechanize to latest.
+
+	* Patched subprocess pipe freeing problem (Chris Abraham).  (This
+	  is a moderately serious bug for long-running programs that use
+	  subprocess to try to run programs that don't exist.)
+
+	  My patch modifies run_tidy to remember if subprocess failed because
+	  tidy didn't exist.
+
+2007-05-28  Titus Brown  <t@iorich.caltech.edu>
+
+	* Added 'info' command, docs, and tests.
+
+	* Removed gopherlib references in mechanize; added test.
+
+2007-03-19  Titus Brown  <t@localhost.localdomain>
+
+	* Fixed bug in my patch to mechanize 'select_form'.
+
+	* Removed debug 'print' in wsgi_intercept.py.
+
 2007-03-06  Titus Brown  <t@localhost.localdomain>
 
 	* RELEASE 0.9b1.
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/doc/commands.html twill-0.9/doc/commands.html
--- twill-0.9~b1/doc/commands.html	2007-03-06 23:00:03.000000000 +0000
+++ twill-0.9/doc/commands.html	2007-12-28 06:45:16.000000000 +0000
@@ -319,6 +319,7 @@
 <div class="section">
 <h1><a id="display" name="display">Display</a></h1>
 <p><strong>echo</strong> <em>&lt;string&gt;</em> -- echo the string to the screen.</p>
+<p><strong>info</strong> -- display information about the current page.</p>
 <p><strong>redirect_output</strong> <em>&lt;filename&gt;</em> -- append all twill output to the given file.</p>
 <p><strong>reset_output</strong> -- display all output to the screen.</p>
 <p><strong>save_html</strong> <em>[&lt;filename&gt;]</em> -- save the current page's HTML into a file.  If
@@ -362,7 +363,7 @@
 <dt><strong>debug</strong> <em>&lt;what&gt;</em> <em>&lt;level&gt;</em> -- turn on or off debugging/tracing for</dt>
 <dd>various functions.  The first argument is either 'http' to show HTTP
 headers, 'equiv-refresh' to test HTTP EQUIV-REFRESH headers, or
-'twill' to show twill commands.  The second argument is '0' for off,
+'commands' to show twill commands.  The second argument is '0' for off,
 '1' for on.</dd>
 </dl>
 </div>
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/doc/commands.txt twill-0.9/doc/commands.txt
--- twill-0.9~b1/doc/commands.txt	2007-03-06 23:00:03.000000000 +0000
+++ twill-0.9/doc/commands.txt	2007-12-28 06:45:16.000000000 +0000
@@ -42,6 +42,8 @@
 
 **echo** *<string>* -- echo the string to the screen.
 
+**info** -- display information about the current page.
+
 **redirect_output** *<filename>* -- append all twill output to the given file.
 
 **reset_output** -- display all output to the screen.
@@ -103,7 +105,7 @@
 **debug** *<what>* *<level>* -- turn on or off debugging/tracing for
   various functions.  The first argument is either 'http' to show HTTP
   headers, 'equiv-refresh' to test HTTP EQUIV-REFRESH headers, or
-  'twill' to show twill commands.  The second argument is '0' for off,
+  'commands' to show twill commands.  The second argument is '0' for off,
   '1' for on.
 
 Variable handling
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/doc/developer.html twill-0.9/doc/developer.html
--- twill-0.9~b1/doc/developer.html	2007-03-06 23:00:04.000000000 +0000
+++ twill-0.9/doc/developer.html	2007-12-28 06:45:16.000000000 +0000
@@ -302,9 +302,9 @@
 </div>
 <div class="section">
 <h1><a id="licensing" name="licensing">Licensing</a></h1>
-<p>twill 0.8 is licensed under the <a class="reference" href="http://www.opensource.org/licenses/mit-license.php";>MIT license</a>.  All code currently
-contained in twill is Copyright (C) 2005, 2006, 2007 C. Titus Brown
-&lt;<a class="reference" href="mailto:titus&#64;idyll.org";>titus&#64;idyll.org</a>&gt;.</p>
+<p>twill 0.8 and above are licensed under the <a class="reference" href="http://www.opensource.org/licenses/mit-license.php";>MIT license</a>.  All code
+currently contained in twill is Copyright (C) 2005, 2006, 2007
+C. Titus Brown &lt;<a class="reference" href="mailto:titus&#64;idyll.org";>titus&#64;idyll.org</a>&gt;.</p>
 <p>In plain English: I own the code, but you're welcome to use it,
 subsume it into other projects, and distribute it freely.  However,
 you must retain copyright attribution.</p>
@@ -314,10 +314,10 @@
 <div class="section">
 <h1><a id="developer-releases" name="developer-releases">Developer releases</a></h1>
 <p>&quot;Developer releases&quot; incorporating all recent significant changes are
-made available in egg format at <a class="reference" href="http://issola.caltech.edu/~t/dist/";>http://issola.caltech.edu/~t/dist/</a>.</p>
+made available at <a class="reference" href="http://darcs.idyll.org/~t/projects/twill-latest.tar.gz";>http://darcs.idyll.org/~t/projects/twill-latest.tar.gz</a></p>
 <p>You can install them with easy_install by typing</p>
 <pre class="literal-block">
-easy_install -f http://issola.caltech.edu/~t/dist/ twill
+easy_install -f http://darcs.idyll.org/~t/projects/twill-latest.tar.gz
 </pre>
 </div>
 <div class="section">
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/doc/developer.txt twill-0.9/doc/developer.txt
--- twill-0.9~b1/doc/developer.txt	2007-03-06 23:00:04.000000000 +0000
+++ twill-0.9/doc/developer.txt	2007-12-28 06:45:16.000000000 +0000
@@ -18,9 +18,9 @@
 Licensing
 ~~~~~~~~~
 
-twill 0.8 is licensed under the `MIT license`_.  All code currently
-contained in twill is Copyright (C) 2005, 2006, 2007 C. Titus Brown
-<titus@idyll.org>.
+twill 0.8 and above are licensed under the `MIT license`_.  All code
+currently contained in twill is Copyright (C) 2005, 2006, 2007
+C. Titus Brown <titus@idyll.org>.
 
 In plain English: I own the code, but you're welcome to use it,
 subsume it into other projects, and distribute it freely.  However,
@@ -29,18 +29,17 @@
 pyparsing_, BeautifulSoup_, and mechanize_ are all included with
 twill, but are under their own licenses.
 
-.. _twill-latest.tar.gz: http://darcs.idyll.org/~t/projects/twill-latest.tar.gz
 .. _MIT license: http://www.opensource.org/licenses/mit-license.php
 
 Developer releases
 ~~~~~~~~~~~~~~~~~~
 
 "Developer releases" incorporating all recent significant changes are
-made available in egg format at http://issola.caltech.edu/~t/dist/.
+made available at http://darcs.idyll.org/~t/projects/twill-latest.tar.gz
 
 You can install them with easy_install by typing ::
 
-   easy_install -f http://issola.caltech.edu/~t/dist/ twill
+   easy_install -f http://darcs.idyll.org/~t/projects/twill-latest.tar.gz
 
 Obtaining twill with darcs
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/doc/index.html twill-0.9/doc/index.html
--- twill-0.9~b1/doc/index.html	2007-03-06 23:00:04.000000000 +0000
+++ twill-0.9/doc/index.html	2007-12-28 06:45:16.000000000 +0000
@@ -300,10 +300,10 @@
 <p>twill is open source and written in Python.</p>
 <div class="section">
 <h1><a id="downloading-twill" name="downloading-twill">Downloading twill</a></h1>
-<p>The latest release of twill is <a class="reference" href="ANNOUNCE-0.9b1.txt">twill 0.9b1</a>, released Tuesday, March 6th,
-2007; it is available for download at
-<a class="reference" href="http://darcs.idyll.org/~t/projects/twill-0.9b1.tar.gz";>http://darcs.idyll.org/~t/projects/twill-0.9b1.tar.gz</a>.  You can also
-use Python's <a class="reference" href="http://peak.telecommunity.com/DevCenter/EasyInstall";>easy_install</a> to install or upgrade twill.</p>
+<p>The latest release of twill is <a class="reference" href="ANNOUNCE-0.9.txt">twill 0.9</a>,
+released Thursday, December 27th, 2007; it is available for download at
+<a class="reference" href="http://darcs.idyll.org/~t/projects/twill-0.9.tar.gz";>http://darcs.idyll.org/~t/projects/twill-0.9.tar.gz</a>.  You can also use
+Python's <a class="reference" href="http://peak.telecommunity.com/DevCenter/EasyInstall";>easy_install</a> to install or upgrade twill.</p>
 <p>twill works with Python 2.3 or later.</p>
 <p>To start using twill, install it and then type <tt class="docutils literal"><span class="pre">twill-sh</span></tt>.  At the
 prompt type:</p>
@@ -320,8 +320,6 @@
 <a class="reference" href="http://twill.idyll.org/";>http://twill.idyll.org/</a>.</p>
 <p>The in-development version of the docs can be found at
 <a class="reference" href="http://darcs.idyll.org/~t/projects/twill/doc/";>http://darcs.idyll.org/~t/projects/twill/doc/</a>.</p>
-<p>The development Web site, with a Trac tracker and wiki, is at
-<a class="reference" href="http://twill.idyll.org/trac/";>http://twill.idyll.org/trac/</a>.</p>
 <p>Documentation is available for the following topics:</p>
 <blockquote>
 <ul class="simple">
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/doc/index.txt twill-0.9/doc/index.txt
--- twill-0.9~b1/doc/index.txt	2007-03-06 23:00:04.000000000 +0000
+++ twill-0.9/doc/index.txt	2007-12-28 06:45:16.000000000 +0000
@@ -14,10 +14,10 @@
 Downloading twill
 -----------------
 
-The latest release of twill is `twill 0.9b1`_, released Tuesday, March 6th,
-2007; it is available for download at
-http://darcs.idyll.org/~t/projects/twill-0.9b1.tar.gz.  You can also
-use Python's easy_install_ to install or upgrade twill.
+The latest release of twill is `twill 0.9 <ANNOUNCE-0.9.txt>`__,
+released Thursday, December 27th, 2007; it is available for download at
+http://darcs.idyll.org/~t/projects/twill-0.9.tar.gz.  You can also use
+Python's easy_install_ to install or upgrade twill.
 
 twill works with Python 2.3 or later.
 
@@ -38,9 +38,6 @@
 The in-development version of the docs can be found at
 http://darcs.idyll.org/~t/projects/twill/doc/.
 
-The development Web site, with a Trac tracker and wiki, is at
-http://twill.idyll.org/trac/.
-
 Documentation is available for the following topics:
 
  * `Examples`_ -- some short examples.
@@ -133,7 +130,6 @@
 .. _archive: http://lists.idyll.org/pipermail/twill/
 
 .. _cmd: http://docs.python.org/lib/module-cmd.html
-.. _twill 0.9b1: ANNOUNCE-0.9b1.txt
 
 .. _MIT license: http://www.opensource.org/licenses/mit-license.php
 .. _easy_install: http://peak.telecommunity.com/DevCenter/EasyInstall
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/doc/LICENSE.txt twill-0.9/doc/LICENSE.txt
--- twill-0.9~b1/doc/LICENSE.txt	2007-03-06 23:00:03.000000000 +0000
+++ twill-0.9/doc/LICENSE.txt	2007-12-28 06:45:16.000000000 +0000
@@ -1,20 +1,21 @@
+The MIT License, http://www.opensource.org/licenses/mit-license.php
+
 twill is Copyright (c) 2005, 2006, 2007 by C. Titus Brown.
 
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
 
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/setup.py twill-0.9/setup.py
--- twill-0.9~b1/setup.py	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/setup.py	2007-12-28 06:45:16.000000000 +0000
@@ -10,8 +10,8 @@
 
 setup(name = 'twill',
       
-      version = '0.9b1',
-      download_url = 'http://darcs.idyll.org/~t/projects/twill-0.9b1.tar.gz',
+      version = '0.9',
+      download_url = 'http://darcs.idyll.org/~t/projects/twill-0.9.tar.gz',
       
       description = 'twill Web browsing language',
       author = 'C. Titus Brown',
@@ -19,7 +19,7 @@
       license='MIT',
 
       packages = ['twill', 'twill.other_packages',
-                  'twill.other_packages.mechanize',
+                  'twill.other_packages._mechanize_dist',
                   'twill.extensions',
                   'twill.extensions.match_parse'],
 
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill/_browser.py twill-0.9/twill/_browser.py
--- twill-0.9~b1/twill/_browser.py	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill/_browser.py	2007-12-28 06:45:16.000000000 +0000
@@ -3,16 +3,13 @@
 """
 
 # wwwsearch imports
-import mechanize
-from mechanize import Browser as MechanizeBrowser
-from mechanize import BrowserStateError, LinkNotFoundError
+from _mechanize_dist import Browser as MechanizeBrowser
 
 import wsgi_intercept
-from utils import run_tidy, StringIO, \
-     FixedHTTPBasicAuthHandler, FunctioningHTTPRefreshProcessor
+from utils import FixedHTTPBasicAuthHandler, FunctioningHTTPRefreshProcessor
 
 def build_http_handler():
-    from mechanize._urllib2 import HTTPHandler
+    from _mechanize_dist._urllib2 import HTTPHandler
 
     class MyHTTPHandler(HTTPHandler):
         def http_open(self, req):
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill/browser.py twill-0.9/twill/browser.py
--- twill-0.9~b1/twill/browser.py	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill/browser.py	2007-12-28 06:45:16.000000000 +0000
@@ -8,16 +8,16 @@
 
 # Python imports
 import re
-import urlparse
 
 # wwwsearch imports
-import mechanize, ClientForm
-from mechanize import BrowserStateError, LinkNotFoundError
+import _mechanize_dist as mechanize
+from _mechanize_dist import BrowserStateError, LinkNotFoundError, ClientForm
 
 # twill package imports
 from _browser import PatchedMechanizeBrowser
-from utils import trunc, print_form, ConfigurableParsingFactory, \
+from utils import print_form, ConfigurableParsingFactory, \
      ResultWrapper, unique_match, HistoryStack
+from errors import TwillException
      
 
 #
@@ -113,8 +113,7 @@
                 self._journey('open', u)
                 success = True
                 break
-            except IOError:
-                raise
+            except IOError:             # @CTB test this!
                 pass
 
         if success:
@@ -363,9 +362,9 @@
         # error out?
         if found is None:
             if not found_multiple:
-                raise Exception('no field matches "%s"' % (fieldname,))
+                raise TwillException('no field matches "%s"' % (fieldname,))
             else:
-                raise Exception('multiple matches to "%s"' % (fieldname,))
+                raise TwillException('multiple matches to "%s"' % (fieldname,))
 
         return found
 
@@ -384,6 +383,8 @@
                 return False
 
             self._browser.select_form(predicate=choose_this_form)
+            assert self._browser.form == form
+
             self.last_submit_button = None
 
         # record the last submit button clicked.
@@ -398,7 +399,7 @@
             fieldname = str(fieldname)
         
         if not self.get_all_forms():
-            raise Exception("no forms on this page!")
+            raise TwillException("no forms on this page!")
         
         ctl = None
         
@@ -408,7 +409,9 @@
             if len(forms) == 1:
                 form = forms[0]
             else:
-                raise Exception("more than one form; you must select one (use 'fv') before submitting")
+                raise TwillException("""\
+more than one form; you must select one (use 'fv') before submitting\
+""")
 
         # no fieldname?  see if we can use the last submit button clicked...
         if not fieldname:
@@ -433,8 +436,9 @@
         
         if ctl:
             # submit w/button
-            print>>OUT, 'Note: submit is using submit button: name="%s", value="%s"' % \
-                  (ctl.name, ctl.value)
+            print>>OUT, """\
+Note: submit is using submit button: name="%s", value="%s"
+""" % (ctl.name, ctl.value)
             
             if isinstance(ctl, ClientForm.ImageControl):
                 request = ctl._click(form, (1,1), "", mechanize.Request)
@@ -484,7 +488,10 @@
         """
         Pretty-print all of the cookies.
         """
-        print>>OUT, '\nThere are %d cookie(s) in the cookiejar.\n' % (len(self.cj,))
+        print>>OUT, '''
+There are %d cookie(s) in the cookiejar.
+''' % (len(self.cj,))
+        
         if len(self.cj):
             for cookie in self.cj:
                 print>>OUT, '\t', cookie
@@ -528,7 +535,9 @@
 
         ## special case refresh loops!?
         if code == 'refresh':
-            raise Exception("infinite refresh loop discovered; aborting.\nTry turning off acknowledge_equiv_refresh...")
+            raise TwillException("""\
+infinite refresh loop discovered; aborting.
+Try turning off acknowledge_equiv_refresh...""")
 
         self.result = ResultWrapper(code, r.geturl(), r.read())
 
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill/commands.py twill-0.9/twill/commands.py
--- twill-0.9~b1/twill/commands.py	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill/commands.py	2007-12-28 06:45:16.000000000 +0000
@@ -3,7 +3,10 @@
 twill-sh.
 """
 
-import sys, mechanize
+import sys
+import _mechanize_dist as mechanize
+from _mechanize_dist import ClientForm
+from _mechanize_dist._headersutil import is_html
 
 OUT=None
 ERR=sys.stderr
@@ -58,14 +61,15 @@
            'reset_error',
            'add_extra_header',
            'show_extra_headers',
-           'clear_extra_headers'
+           'clear_extra_headers',
+           'info'
            ]
 
 import re, getpass, time
 
 from browser import TwillBrowser
 
-from errors import TwillAssertionError
+from errors import TwillException, TwillAssertionError
 import utils
 from utils import set_form_control_value, run_tidy
 from namespaces import get_twill_glocals
@@ -164,9 +168,14 @@
     m = None
     if current_url is not None:
         m = regexp.search(current_url)
+    else:
+        current_url = ''
 
     if not m:
-        raise TwillAssertionError("url does not match '%s'" % (should_be,))
+        raise TwillAssertionError("""\
+current url is '%s';
+does not match '%s'
+""" % (current_url, should_be,))
 
     if m.groups():
         match_str = m.group(1)
@@ -234,7 +243,7 @@
     else:
         match_str = m.group(0)
 
-    global_dict, local_dict = get_twill_glocals()
+    _, local_dict = get_twill_glocals()
     local_dict['__match__'] = match_str
 
 def notfind(what, flags=''):
@@ -419,8 +428,6 @@
 
     'formvalue' is available as 'fv' as well.
     """
-    import ClientForm
-    
     form = browser.get_form(formname)
     if not form:
         raise TwillAssertionError("no matching forms!")
@@ -438,7 +445,7 @@
         return
 
     if isinstance(control, ClientForm.FileControl):
-        raise Exception('form field is for file upload; use "formfile" instead')
+        raise TwillException('form field is for file upload; use "formfile" instead')
 
     set_form_control_value(control, value)
 
@@ -468,7 +475,7 @@
     control = browser.get_form_field(form, fieldname)
 
     if not control.is_of_kind('file'):
-        raise Exception('ERROR: field is not a file upload field!')
+        raise TwillException('ERROR: field is not a file upload field!')
 
     browser.clicked(form, control)
     fp = open(filename, 'rb')
@@ -527,7 +534,7 @@
     >> getinput <prompt>
     Get input, store it in '__input__'.
     """
-    global_dict, local_dict = get_twill_glocals()
+    _, local_dict = get_twill_glocals()
 
     inp = raw_input(prompt)
 
@@ -540,7 +547,7 @@
     
     Get a password ("invisible input"), store it in '__password__'.
     """
-    global_dict, local_dict = get_twill_glocals()
+    _, local_dict = get_twill_glocals()
 
     inp = getpass.getpass(prompt)
 
@@ -644,7 +651,7 @@
         else:
             parse.debug_print_commands(False)
     else:
-        raise Exception('unknown debugging type: "%s"' % (what,))
+        raise TwillException('unknown debugging type: "%s"' % (what,))
 
 def run(cmd):
     """
@@ -841,7 +848,7 @@
         if v is None:
             print>>OUT, '*** no such configuration key', key
             print>>OUT, 'valid keys are:', ";".join(_options.keys())
-            raise Exception('no such configuration key: %s' % (key,))
+            raise TwillException('no such configuration key: %s' % (key,))
         elif value is None:
             print>>OUT, ''
             print>>OUT, 'key %s: value %s' % (key, v)
@@ -849,3 +856,38 @@
         else:
             value = utils.make_boolean(value)
             _options[key] = value
+
+def info():
+    """
+    >> info
+
+    Report information on current page.
+    """
+    current_url = browser.get_url()
+    if current_url is None:
+        print "We're not on a page!"
+        return
+    
+    content_type = browser._browser._response.info().getheaders("content-type")
+    check_html = is_html(content_type, current_url)
+
+    code = browser.get_code()
+
+
+    print >>OUT, '\nPage information:'
+    print >>OUT, '\tURL:', current_url
+    print >>OUT, '\tHTTP code:', code
+    print >>OUT, '\tContent type:', content_type[0],
+    if check_html:
+        print >>OUT, '(HTML)'
+    else:
+        print ''
+    if check_html:
+        title = browser.get_title()
+        print >>OUT, '\tPage title:', title
+
+        forms = browser.get_all_forms()
+        if len(forms):
+            print >>OUT, '\tThis page contains %d form(s)' % (len(forms),)
+            
+    print >>OUT, ''
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill/errors.py twill-0.9/twill/errors.py
--- twill-0.9~b1/twill/errors.py	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill/errors.py	2007-12-28 06:45:16.000000000 +0000
@@ -1,10 +1,16 @@
-class TwillAssertionError(Exception):
+class TwillException(Exception):
+    """
+    General twill exception.
+    """
+    pass
+
+class TwillAssertionError(TwillException):
     """
     AssertionError to raise upon failure of some twill command.
     """
     pass
 
-class TwillNameError(Exception):
+class TwillNameError(TwillException):
     """
     Error to raise when an unknown command is called.
     """
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill/extensions/match_parse/__init__.py twill-0.9/twill/extensions/match_parse/__init__.py
--- twill-0.9~b1/twill/extensions/match_parse/__init__.py	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill/extensions/match_parse/__init__.py	2007-12-28 06:45:16.000000000 +0000
@@ -86,6 +86,6 @@
      """
      global_dict, local_dict = get_twill_glocals()
      
-     match = local_dict['__matchlist__']
-     match.pop(int(which))
+     matchlist = local_dict['__matchlist__']
+     match = matchlist.pop(int(which))
      local_dict['__match__'] = match
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill/__init__.py twill-0.9/twill/__init__.py
--- twill-0.9~b1/twill/__init__.py	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill/__init__.py	2007-12-28 06:45:16.000000000 +0000
@@ -1,20 +1,20 @@
 # This file is part of the twill source distribution.
 #
 # twill is a extensible scriptlet language for testing Web apps,
-# available at http://www.idyll.org/~t/www-tools/twill.html.
+# available at http://twill.idyll.org/.
 #
-# Contact author: C. Titus Brown, titus@caltech.edu.
+# Contact author: C. Titus Brown, titus@idyll.org.
 #
 # This program and all associated source code files are Copyright (C)
-# 2005 by C. Titus Brown.  It is under the Lesser GNU Public License;
+# 2005-2007 by C. Titus Brown.  It is released under the MIT license;
 # please see the included LICENSE.txt file for more information, or
-# contact Titus directly.
+# go to http://www.opensource.org/licenses/mit-license.php.
 
 """
 twill Web testing language & associated utilities.
 """
 
-__version__ = "0.9b1"
+__version__ = "0.9"
 
 #import warnings
 #warnings.defaultaction = "error"
@@ -57,7 +57,9 @@
 
 def get_browser_state():
     import warnings
-    warnings.warn("get_browser_state is deprecated; use 'twill.get_browser() instead.", DeprecationWarning)
+    warnings.warn("""\
+get_browser_state is deprecated; use 'twill.get_browser() instead.
+""", DeprecationWarning)
     return get_browser()
 
 # initialize global dict
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill/parse.py twill-0.9/twill/parse.py
--- twill-0.9~b1/twill/parse.py	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill/parse.py	2007-12-28 06:45:16.000000000 +0000
@@ -71,15 +71,21 @@
     """
     newargs = []
     for arg in args:
-        # __variable substitution.  @CTB do we need this?
+        # __variable substitution.
         if arg.startswith('__'):
             try:
                 val = eval(arg, globals_dict, locals_dict)
             except NameError:           # not in dictionary; don't interpret.
                 val = arg
-                
-            newargs.append(val)
 
+
+            print '*** VAL IS', val, 'FOR', arg
+            
+            if isinstance(val, str):
+                newargs.append(val)
+            else:
+                newargs.extend(val)
+                
         # $variable substitution
         elif arg.startswith('$') and not arg.startswith('${'):
             try:
@@ -201,19 +207,17 @@
     
     try:
 
-        n = 0
-        for line in inp:
-            n += 1
-
+        for n, line in enumerate(inp):
             if not line.strip():            # skip empty lines
                 continue
 
+            cmdinfo = "%s:%d" % (sourceinfo, n,)
+            print 'AT LINE:', cmdinfo
+
             cmd, args = parse_command(line, globals_dict, locals_dict)
             if cmd is None:
                 continue
 
-            cmdinfo = "%s:%d" % (sourceinfo, n,)
-
             try:
                 execute_command(cmd, args, globals_dict, locals_dict, cmdinfo)
             except SystemExit:
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill/shell.py twill-0.9/twill/shell.py
--- twill-0.9~b1/twill/shell.py	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill/shell.py	2007-12-28 06:45:16.000000000 +0000
@@ -354,6 +354,9 @@
                 success.append(filename)
             except Exception, e:
                 if options.fail:
+#                    import pdb
+#                    _, _, tb = sys.exc_info()
+#                    pdb.post_mortem(tb)
                     raise
                 else:
                     print '** UNHANDLED EXCEPTION:', str(e)
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill/utils.py twill-0.9/twill/utils.py
--- twill-0.9~b1/twill/utils.py	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill/utils.py	2007-12-28 06:45:16.000000000 +0000
@@ -11,28 +11,11 @@
 
 import subprocess
 
-import mechanize, ClientForm
-from mechanize._util import time
-from mechanize._http import HTTPRefreshProcessor
-from mechanize import BrowserStateError
-
-class FakeResponse:
-    def __init__(self, data, url, info):
-        self.fp = StringIO(data)
-        self.url = url
-        self._info = info
-
-    def read(self, *args):
-        return self.fp.read(*args)
-
-    def seek(self, *args):
-        return self.fp.seek(*args)
-
-    def info(self):
-        return self._info
-
-    def geturl(self):
-        return self.url
+import _mechanize_dist as mechanize
+from _mechanize_dist import ClientForm
+from _mechanize_dist._util import time
+from _mechanize_dist._http import HTTPRefreshProcessor
+from _mechanize_dist import BrowserStateError
 
 class ResultWrapper:
     """
@@ -161,7 +144,7 @@
             return True
         return False
 
-    raise Exception("unable to convert '%s' into true/false..." % (value,))
+    raise TwillException("unable to convert '%s' into true/false" % (value,))
 
 def set_form_control_value(control, val):
     """
@@ -263,6 +246,7 @@
 #
 
 _tidy_cmd = ["tidy", "-q", "-ashtml"]
+_tidy_exists = True
 
 def run_tidy(html):
     """
@@ -271,34 +255,38 @@
     Return a 2-tuple (output, errors).  (None, None) will be returned if
     'tidy' doesn't exist or otherwise fails.
     """
-    global _tidy_cmd
+    global _tidy_cmd, _tidy_exists
 
     from commands import _options
     require_tidy = _options.get('require_tidy')
 
-
+    if not _tidy_exists:
+        if require_tidy:
+            raise TwillException("tidy does not exist and require_tidy is set")
+        return (None, None)
+    
     #
-    # run the command
+    # run the command, if we think it exists
     #
     
     clean_html = None
-    try:
-        process = subprocess.Popen(_tidy_cmd, stdin=subprocess.PIPE,
-                                   stdout=subprocess.PIPE,
-                                   stderr=subprocess.PIPE, bufsize=0, shell=False)
-        (stdout, stderr) = process.communicate(html)
-
-        clean_html = stdout
-        errors = stderr
-
-        success = True
-    except OSError:
-        success = False
-        pass
+    if _tidy_exists:
+        try:
+            process = subprocess.Popen(_tidy_cmd, stdin=subprocess.PIPE,
+                                       stdout=subprocess.PIPE,
+                                       stderr=subprocess.PIPE, bufsize=0,
+                                       shell=False)
+        
+            (stdout, stderr) = process.communicate(html)
+
+            clean_html = stdout
+            errors = stderr
+        except OSError:
+            _tidy_exists = False
 
     errors = None
-    if (not success or clean_html is None) and require_tidy:
-            raise Exception("cannot run 'tidy'; \n\t%s\n" % (errors,))
+    if require_tidy and clean_html is None:
+        raise TwillException("tidy does not exist and require_tidy is set")
 
     return (clean_html, errors)
 
@@ -373,8 +361,10 @@
             if new_html:
                 self._html = new_html
 
-        return FakeResponse(self._html, self._url, response.info())
-
+        return mechanize.make_response(self._html, response._headers.items(),
+                                       response._url, response.code,
+                                       response.msg)
+                                       
     def use_BS(self):
         from twill.commands import _options
         flag = _options.get('use_BeautifulSoup')
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill/wsgi_intercept.py twill-0.9/twill/wsgi_intercept.py
--- twill-0.9~b1/twill/wsgi_intercept.py	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill/wsgi_intercept.py	2007-12-28 06:45:16.000000000 +0000
@@ -268,13 +268,15 @@
 
             if generator_data:
                 self.output.write(generator_data)
-                for data in self.result:
+
+                while 1:
+                    data = self.result.next()
                     self.output.write(data)
+                    
         except StopIteration:
             pass
 
         if hasattr(app_result, 'close'):
-            print 'closing...'
             app_result.close()
             
         if debuglevel >= 2:
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill-fork twill-0.9/twill-fork
--- twill-0.9~b1/twill-fork	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill-fork	2007-12-28 06:45:16.000000000 +0000
@@ -1,16 +1,15 @@
-#! /usr/bin/env python2.3
-#
+#! /usr/bin/env python
 # This file is part of the twill source distribution.
 #
 # twill is a extensible scriptlet language for testing Web apps,
-# available at http://www.idyll.org/~t/www-tools/twill.html.
+# available at http://twill.idyll.org/.
 #
-# Contact author: C. Titus Brown, titus@caltech.edu.
+# Contact author: C. Titus Brown, titus@idyll.org.
 #
 # This program and all associated source code files are Copyright (C)
-# 2005 by C. Titus Brown.  It is under the Lesser GNU Public License;
+# 2005-2007 by C. Titus Brown.  It is released under the MIT license;
 # please see the included LICENSE.txt file for more information, or
-# contact Titus directly.
+# go to http://www.opensource.org/licenses/mit-license.php.
 
 """
 twill multiprocess execution system.
diff --exclude='*other_packages*' --exclude='*tests*' -urN twill-0.9~b1/twill-sh twill-0.9/twill-sh
--- twill-0.9~b1/twill-sh	2007-03-06 23:00:05.000000000 +0000
+++ twill-0.9/twill-sh	2007-12-28 06:45:16.000000000 +0000
@@ -1,16 +1,15 @@
-#! /usr/bin/env python2.3
-#
+#! /usr/bin/env python
 # This file is part of the twill source distribution.
 #
 # twill is a extensible scriptlet language for testing Web apps,
-# available at http://www.idyll.org/~t/www-tools/twill.html.
+# available at http://twill.idyll.org/.
 #
-# Contact author: C. Titus Brown, titus@caltech.edu.
+# Contact author: C. Titus Brown, titus@idyll.org.
 #
 # This program and all associated source code files are Copyright (C)
-# 2005 by C. Titus Brown.  It is under the Lesser GNU Public License;
+# 2005-2007 by C. Titus Brown.  It is released under the MIT license;
 # please see the included LICENSE.txt file for more information, or
-# contact Titus directly.
+# go to http://www.opensource.org/licenses/mit-license.php.
 
 """
 twill shell.

Attachment: pgpXFnFEHVeMD.pgp
Description: PGP signature


Reply to: