App Engine Python SDK version 1.9.12

git-svn-id: http://googleappengine.googlecode.com/svn/trunk@474 80f5ef21-4148-0410-bacc-cfb02402ada8
App Engine Java SDK version 1.9.12

git-svn-id: http://googleappengine.googlecode.com/svn/trunk@475 80f5ef21-4148-0410-bacc-cfb02402ada8
Revision created by MOE tool push_codebase.
MOE_MIGRATION=


git-svn-id: http://googleappengine.googlecode.com/svn/trunk@476 80f5ef21-4148-0410-bacc-cfb02402ada8
Handle IPv6 addresses in URLs correctly

Test Plan: Configure kake/webapp to listen on :: instead of 0.0.0.0 (D12939), `make server`, and hit http://[::1]:8080/ or http://[2001:438:fffd:26:2cd3:abc5:1cf8:5b61]:8080/

Reviewers: dylan, csilvers

Reviewed By: dylan, csilvers

Subscribers: alpert, dylan, csilvers

Differential Revision: http://phabricator.khanacademy.org/D12938
Comment out the 'You are missing PIL' warning.

Summary:
I think they do the right thing by silently setting the images-stub to
be a 'not-implemented' stub, so you get an error when you try to
actually use the GAE images library.

(That error even says "install PIL" so there's really *nothing* to be
gained by having this on-init warning.  Ah well.  Good thing we've
forked the source. :-) )

This will avoid log spam, and also avoid confusion, especially from
new folks, who think this is actually an error that might be causing
them problems.

Test Plan:
Ran
   make serve
and didn't see any mention of PIL.

Reviewers: dylan

Reviewed By: dylan

Subscribers: ayman, dylan

Differential Revision: http://phabricator.khanacademy.org/D13099
Set the executable bit on runnable SDK scripts

Summary:
This lets us set up symlinks in webapp/tools that can run as, e.g.,
tools/appcfg.py.

Test Plan: ./appcfg.py now works.

Reviewers: dylan

Reviewed By: dylan

Subscribers: dylan, csilvers

Differential Revision: http://phabricator.khanacademy.org/D9865
Add change detection logging to the mtime and inotify file watchers

Summary:
The mtime and inotify file watchers will now emit a log message containing the
path of the changed file that is triggering a reload.

I'll do the same for the fsevents file watcher when I restore it but I'm not
going to touch the win32 file watcher.

Test Plan:
I tested the mtime file watcher on my Mac.

1. Started dev_appserver.py with the usual arguments for serving webapp
2. Ran `touch Makefile` and saw the log message "Detected change in Makefile"
3. Deleted and re-added the Makefile and saw the same log message for both
4. Ran `touch content/models.py` and saw log messages for content, content/models.py, and genfiles/kake-server.log

Reviewers: csilvers

Reviewed By: csilvers

Differential Revision: http://phabricator.khanacademy.org/D9084
Copy over the ka-specific files from the GAE-1.9.6 branch.

Auditors: dylan

Test Plan:
None
Restore the FSEvents-based file watcher, and remove the WinFileWatcher.

This is a cherry-pick from the 1.9.6 branch:
   3cf5710e777550cbf1b684d580da0a5f65f27b6c
   3fd0b77bed73aa7036c70bf0c4e3cfff4fd170f0
with the following modification for 1.9.10:

Instead of adding a new watcher_common.ignore_dir() method, I use the
existing (in 1.9.10) skip_ignored_dirs() method.

Auditors: dylan

Test plan:
Fingers crossed.
We need to check *every* directory component, not just the lowest one.

skip_ignored_dirs() is weird in that it takes just a single directory
name, not a full path (so it will be useless for our skip-files regexp
stuff one day).  Ah well.

Auditors: dylan

Test Plan:
Dylan will test!
Bracket host in URL when colon present

Summary: This results in hostnames like `[::]:8080` instead of `:::8080`.

Test Plan: Crossed fingers

Reviewers: eater

Reviewed By: eater

Subscribers: csilvers, alpert, dylan

Differential Revision: http://phabricator.khanacademy.org/D13247
Re-add WinFileWatcher, at least temporarily.

This will let us create a patch to send upstream, involving the
skip-files re.  (the win_file_watcher has to at least *compile* with
the new code, even if it doesn't *use* it...)

This reverts parts of commit ec32094e5afaf0420190e318f0511cc99d217840.

Test plan:
None
Have the file-watchers ignore files that are not in skip-files.

Summary:
The motivation is that if a file is in an app.yaml's skip_files, then
it is not accessible to the dev-appserver, and thus we don't care if
it changes or not.

This allows applications to store files such as the datastore inside
the app directory, without having to worry about constant reloads as a
result.  It also opens the door -- if we wanted to -- of lifting the
assumption that we never need to watch dot-directories in
watcher_common.py, and instead explicitly skip the dot-directories
that the user puts in skip_files.

As part of this change, I removed the _IMMUTABLE_PROPERTIES part of
ModuleConfiguration.  It didn't work well with skip-files reloading,
and I believe that's obsolete these days in any case, since we always
spin up a new instance when the yaml files change.

The implementation mostly involves passing around the skip-files RE to
the watchers.  We have to do a little work on some watchers to get the
filenames relative to application-root, since the filenames in the
skip-files RE are all taken to be relative to the application-root.

Test Plan:
   env PYTHONPATH=. python google/appengine/tools/devappserver2/inotify_file_watcher_test.py
   env PYTHONPATH=. python google/appengine/tools/devappserver2/mtime_file_watcher_test.py
   env PYTHONPATH=. python google/appengine/tools/devappserver2/win32_file_watcher_test.py

Reviewers: chris, dylan

Reviewed By: chris, dylan

Subscribers: dylan

Differential Revision: http://phabricator.khanacademy.org/D13232
Drat, I didn't change the call to ignore_dir() when I fixed the signature.

Now the code is cleaner, which is nice.

Auditors: dylan

Test Plan:
Dylan is running this for me. :-)
Merge branch '1.9.12'

Conflicts:
	README.md