Commits on Aug 2, 2012
  1. Fix. Some object listings come Content-Encoding: gzip Now we handlle …

    …that.
    
    This fixes 417 error (on git client) and "fatal: protocol error: bad line length character: #$@$" on server.
    committed Aug 1, 2012
Commits on Feb 5, 2011
  1. Merge branch 'streaming_subprocess_io'

    Old subprocess wrapper would cache subprocess output to disk and was a bit slow. This one caches nothing and streams the output directly to the HTTP Response. The new subprocess wrapper is also some 70% faster at scraping and feeding subp output.
    
    There is one thing though.. The new output streaming method relies on new WSGI "1.1", PEP3333 and now must run on PEP3333 compatible server ONLY.
    committed Feb 5, 2011
Commits on Jan 31, 2011
  1. Removing old subprocessio submodule entry. New single-file code repla…

    …cement available
    
    New subprocessio module takes us in a direction separate from monkeypatching the submodule.Popen. We will use a subprocess wrapper iterator.
    committed Jan 30, 2011
  2. Added new subprocess stream reader iterator wrapper.

    WSGI PEP3333 Allows an iterator with .close() to be passed to the
    server. This object is designed to wrap subprocess communication
    and present the output as an iterator.
    committed Jan 30, 2011
Commits on Jan 30, 2011
Commits on Jan 27, 2011
  1. Moving around contents of CherryPyWSGIServer folder and reallighning …

    …import statements for new structure.
    committed Jan 27, 2011
Commits on Nov 29, 2010
Commits on Nov 21, 2010
  1. Changing the names of command-line options.

    path_prefix > content_path
    repo_url_marker > uri_marker
    
    This is to make the server more compatible with wrapping applications.
    committed Nov 21, 2010
Commits on Nov 9, 2010
Commits on Oct 30, 2010
Commits on Oct 2, 2010
Commits on Oct 1, 2010
  1. Finalizing switch to CherryPy.WSGIServer as the default WSGI server.

    The git_http_backend module is NOT tied to CherryPy's WSGI server. It can run against any WSGI 1.1-compatible (WSGI 1.0 if you don't work with git packs larger than 1Mb) server. The "default" means - when we run git_http_backend.py on the command-line - the simplest deployment scenario - it envokes a local copy of Cherrypy.WSGIServer and runs against it.
    committed Oct 1, 2010
  2. Adding large file support for SmartHTTP through support for chunked e…

    …ncoding and WSGI 1.1 servers.
    committed Oct 1, 2010
  3. Switching to CherryPy as the default WSGI server.

    WSGIREF has prooven not to support chunked Transfer coding. git client sends chunked for packs over 1mb. I have almost no choice but to switch to something else.
    committed with Oct 1, 2010
Commits on Sep 27, 2010
  1. changing SmartHTTPInofRefs server component to work on strings and me…

    …mory-based objects.
    
    Previously tempfile.TemporaryFile() was used and was passed to subprocess.Popen as stdout outlet. That would involve extra file operations for temp files in cases when output is relatively small (hundreds of bytes). After the subprocess.PopebIO.communicateIO introduction, we can now reasonably easily manage the output in memory from start to finish.
    committed with Sep 26, 2010
Commits on Sep 24, 2010
  1. Adding custom subprocess.py module dependency for file-persisted scre…

    …en-scraping and rewiring the server code to rely on it.
    
    Adding git submodule for subprocessio.py (and its companion subprocess.py for IronPython). These modules are optimized for memory-efficient screen-scraping of the underlying process output. Normal subprocess.py module either stores the entire output in memory (not good for large git console outputs) or forces you to choose file-based storage from the start and pass that as stdout option to Popen. The modules added here have a busize option that sets a threashold which defines after what point memory-based output storage gets persisted to file. This way you can process multi-gigabyte and multi-byte git outputs without caring about blocking the PIPE, with the same exact command - communicateIO.
    Per my tests, this replacement pure-Python thread suprocess module is very close in speed to the native Win32-ABI-based subprocess implementation. Don't be shy about using it. The performance on IronPython in some cases exceeds that of cPython's native suprocess.py.
    committed Sep 23, 2010
Commits on Sep 22, 2010
Commits on Sep 21, 2010
  1. Adding unit tests

    committed Sep 21, 2010
  2. Commented out gzip support. Prunned subprocess pipe, IO objects creat…

    …ion. Renamed 2 classes to fall into naming convention.
    
    - Commented out gzip support. IronPython does not have gzip. WSGI PEP333 prescribes that the app itself does not mess with compression and let the server deal with it. I don't want to mess with that at all because the size improvement of using gzip is immaterial because git bundles are already well-packed.
    - Prunned the types and quantity of temp file object crated during spawning of subprocess. Specifically, trying to avoid creating IO-likes for stderr and stdin when not needed. This is dangerous in case of stderr as if the output is large, it will block, but we will go on this way, and will deal with problems when they show up.
    - Class lister was listing the classes in alphabetical order, not order of appearance. Got tired of that, renamed 2 related classes to start from name of superclass.
    committed Sep 20, 2010
Commits on Sep 20, 2010
Commits on Sep 18, 2010
  1. fixing a bug in activation of static (non-smart) server code. Cleanin…

    …g up module invocation for IronPython compatibility
    committed Sep 18, 2010
Commits on Aug 10, 2010
Commits on Aug 4, 2010
  1. Moving Static Server, Selector and Canned response handler into one f…

    …ile, to use nested subclass system.
    committed with Aug 3, 2010
  2. Optimized IO pipeline in Git-specific WSGI handler, mostly for readib…

    …ility, slightly for performance.
    committed Aug 3, 2010
Commits on Aug 3, 2010
  1. Cleaning up command IO interface. process.communicate() actually is n…

    …o different from process.wait() so we are simplifying.
    committed Aug 3, 2010
Commits on Jun 20, 2010
  1. adding experimental IOChunker based on subprocess. The goal is to be …

    …able to control the flow of data from the subprocess. It's not hooked up to anything yet.
    committed Jun 19, 2010
Commits on Jun 10, 2010
  1. Adding mime types for git

    committed Jun 9, 2010
Commits on Jun 4, 2010
  1. Added manual running of 'git update-server-info' after every remote p…

    …ush.
    
    Old clients need to have access to real info/refs file, which is now recreated after every push of a pack.
    committed Jun 4, 2010