diff --git a/Lib/shutil.py b/Lib/shutil.py
index c365ad6..e9cebae 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -187,26 +187,44 @@
     except os.error:
         onerror(os.rmdir, path, sys.exc_info())
 
-def move(src, dst):
-    """Recursively move a file or directory to another location.
 
-    If the destination is on our current filesystem, then simply use
-    rename.  Otherwise, copy src to the dst and then remove src.
+def _basename(path):
+    # A basename() variant which first strips the trailing slash, if present.
+    # Thus we always get the last component of the path, even for directories.
+    return os.path.basename(path.rstrip(os.path.sep))
+
+def move(src, dst):
+    """Recursively move a file or directory to another location. This is
+    similar to the Unix "mv" command.
+
+    If the destination is a directory or a symlink to a directory, the source
+    is moved inside the directory. The destination path must not already
+    exist.
+
+    If the destination already exists but is not a directory, it may be
+    overwritten depending on os.rename() semantics.
+
+    If the destination is on our current filesystem, then rename() is used.
+    Otherwise, src is copied to the destination and then removed.
     A lot more could be done here...  A look at a mv.c shows a lot of
     the issues this implementation glosses over.
 
     """
-
+    real_dst = dst
+    if os.path.isdir(dst):
+        real_dst = os.path.join(dst, _basename(src))
+        if os.path.exists(real_dst):
+            raise Error("Destination path '%s' already exists" % real_dst)
     try:
-        os.rename(src, dst)
+        os.rename(src, real_dst)
     except OSError:
         if os.path.isdir(src):
             if destinsrc(src, dst):
                 raise Error("Cannot move a directory '%s' into itself '%s'." % (src, dst))
-            copytree(src, dst, symlinks=True)
+            copytree(src, real_dst, symlinks=True)
             rmtree(src)
         else:
-            copy2(src,dst)
+            copy2(src, real_dst)
             os.unlink(src)
 
 def destinsrc(src, dst):
diff --git a/Lib/test/test_errno.py b/Lib/test/test_errno.py
index 70bbfbc..3077191 100755
--- a/Lib/test/test_errno.py
+++ b/Lib/test/test_errno.py
@@ -7,61 +7,15 @@
 from test import test_support
 import unittest
 
-errors = ['E2BIG', 'EACCES', 'EADDRINUSE', 'EADDRNOTAVAIL', 'EADV',
-          'EAFNOSUPPORT', 'EAGAIN', 'EALREADY', 'EBADE', 'EBADF',
-          'EBADFD', 'EBADMSG', 'EBADR', 'EBADRQC', 'EBADSLT',
-          'EBFONT', 'EBUSY', 'ECHILD', 'ECHRNG', 'ECOMM',
-          'ECONNABORTED', 'ECONNREFUSED', 'ECONNRESET',
-          'EDEADLK', 'EDEADLOCK', 'EDESTADDRREQ', 'EDOTDOT', 'EDOM',
-          'EDQUOT', 'EEXIST', 'EFAULT', 'EFBIG', 'EHOSTDOWN',
-          'EHOSTUNREACH', 'EIDRM', 'EILSEQ', 'EINPROGRESS',
-          'EINTR', 'EINVAL', 'EIO', 'EISCONN', 'EISDIR', 'EISNAM',
-          'EL2HLT', 'EL2NSYNC', 'EL3HLT', 'EL3RST', 'ELIBACC',
-          'ELIBBAD', 'ELIBEXEC', 'ELIBMAX', 'ELIBSCN', 'ELNRNG',
-          'ELOOP', 'EMFILE', 'EMLINK', 'EMSGSIZE', 'EMULTIHOP',
-          'ENAMETOOLONG', 'ENAVAIL', 'ENETDOWN', 'ENETRESET', 'ENETUNREACH',
-          'ENFILE', 'ENOANO', 'ENOBUFS', 'ENOCSI', 'ENODATA',
-          'ENODEV', 'ENOENT', 'ENOEXEC', 'ENOLCK', 'ENOLINK',
-          'ENOMEM', 'ENOMSG', 'ENONET', 'ENOPKG', 'ENOPROTOOPT',
-          'ENOSPC', 'ENOSR', 'ENOSTR', 'ENOSYS', 'ENOTBLK',
-          'ENOTCONN', 'ENOTDIR', 'ENOTEMPTY', 'ENOTNAM', 'ENOTOBACCO', 'ENOTSOCK',
-          'ENOTTY', 'ENOTUNIQ', 'ENXIO', 'EOPNOTSUPP',
-          'EOVERFLOW', 'EPERM', 'EPFNOSUPPORT', 'EPIPE',
-          'EPROTO', 'EPROTONOSUPPORT', 'EPROTOTYPE',
-          'ERANGE', 'EREMCHG', 'EREMOTE', 'EREMOTEIO', 'ERESTART',
-          'EROFS', 'ESHUTDOWN', 'ESOCKTNOSUPPORT', 'ESPIPE',
-          'ESRCH', 'ESRMNT', 'ESTALE', 'ESTRPIPE', 'ETIME',
-          'ETIMEDOUT', 'ETOOMANYREFS', 'ETXTBSY', 'EUCLEAN', 'EUNATCH',
-          'EUSERS', 'EWOULDBLOCK', 'EXDEV', 'EXFULL',
-          'WSABASEERR', 'WSADESCRIPTIO', 'WSAEACCES', 'WSAEADDRINUSE',
-          'WSAEADDRNOTAVAIL', 'WSAEAFNOSUPPORT', 'WSAEALREADY',
-          'WSAEBADF', 'WSAECONNABORTED', 'WSAECONNREFUSED',
-          'WSAECONNRESET', 'WSAEDESTADDRREQ', 'WSAEDISCON',
-          'WSAEDQUOT', 'WSAEFAULT', 'WSAEHOSTDOWN', 'WSAEHOSTUNREACH',
-          'WSAEINPROGRESS', 'WSAEINTR', 'WSAEINVAL', 'WSAEISCONN',
-          'WSAELOOP', 'WSAEMFILE', 'WSAEMSGSIZE', 'WSAENAMETOOLONG',
-          'WSAENETDOWN', 'WSAENETRESET', 'WSAENETUNREACH',
-          'WSAENOBUFS', 'WSAENOPROTOOPT', 'WSAENOTCONN',
-          'WSAENOTEMPTY', 'WSAENOTSOCK', 'WSAEOPNOTSUPP',
-          'WSAEPFNOSUPPORT', 'WSAEPROCLIM', 'WSAEPROTONOSUPPORT',
-          'WSAEPROTOTYPE', 'WSAEREMOTE', 'WSAESHUTDOWN',
-          'WSAESOCKTNOSUPPORT', 'WSAESTALE', 'WSAETIMEDOUT',
-          'WSAETOOMANYREFS', 'WSAEUSERS', 'WSAEWOULDBLOCK',
-          'WSAGETASYNCBUFLE', 'WSAGETASYNCERRO', 'WSAGETSELECTERRO',
-          'WSAGETSELECTEVEN', 'WSAHOS', 'WSAMAKEASYNCREPL',
-          'WSAMAKESELECTREPL', 'WSAN', 'WSANOTINITIALISED', 'WSASY',
-          'WSASYSNOTREADY', 'WSATR', 'WSAVERNOTSUPPORTED']
-
+std_c_errors = frozenset(['EDOM', 'ERANGE'])
 
 class ErrnoAttributeTests(unittest.TestCase):
 
     def test_for_improper_attributes(self):
         # No unexpected attributes should be on the module.
-        errors_set = set(errors)
-        for attribute in errno.__dict__.keys():
-            if attribute.isupper():
-                self.assert_(attribute in errors_set,
-                                "%s is an unexpected error value" % attribute)
+        for error_code in std_c_errors:
+            self.assert_(hasattr(errno, error_code),
+                            "errno is missing %s" % error_code)
 
     def test_using_errorcode(self):
         # Every key value in errno.errorcode should be on the module.
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index b63031e..2a316b2 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -63,17 +63,6 @@
         self.assertRaises(OSError, shutil.rmtree, path)
         os.remove(path)
 
-    def test_dont_move_dir_in_itself(self):
-        src_dir = tempfile.mkdtemp()
-        try:
-            dst = os.path.join(src_dir, 'foo')
-            self.assertRaises(shutil.Error, shutil.move, src_dir, dst)
-        finally:
-            try:
-                os.rmdir(src_dir)
-            except:
-                pass
-
     def test_copytree_simple(self):
         def write_data(path, data):
             f = open(path, "w")
@@ -162,9 +151,123 @@
                 shutil.rmtree(TESTFN, ignore_errors=True)
 
 
+class TestMove(unittest.TestCase):
+
+    def setUp(self):
+        filename = "foo"
+        self.src_dir = tempfile.mkdtemp()
+        self.dst_dir = tempfile.mkdtemp()
+        self.src_file = os.path.join(self.src_dir, filename)
+        self.dst_file = os.path.join(self.dst_dir, filename)
+        # Try to create a dir in the current directory, hoping that it is
+        # not located on the same filesystem as the system tmp dir.
+        try:
+            self.dir_other_fs = tempfile.mkdtemp(
+                dir=os.path.dirname(__file__))
+            self.file_other_fs = os.path.join(self.dir_other_fs,
+                filename)
+        except OSError:
+            self.dir_other_fs = None
+        with open(self.src_file, "wb") as f:
+            f.write(b"spam")
+
+    def tearDown(self):
+        for d in (self.src_dir, self.dst_dir, self.dir_other_fs):
+            try:
+                if d:
+                    shutil.rmtree(d)
+            except:
+                pass
+
+    def _check_move_file(self, src, dst, real_dst):
+        contents = open(src, "rb").read()
+        shutil.move(src, dst)
+        self.assertEqual(contents, open(real_dst, "rb").read())
+        self.assertFalse(os.path.exists(src))
+
+    def _check_move_dir(self, src, dst, real_dst):
+        contents = sorted(os.listdir(src))
+        shutil.move(src, dst)
+        self.assertEqual(contents, sorted(os.listdir(real_dst)))
+        self.assertFalse(os.path.exists(src))
+
+    def test_move_file(self):
+        # Move a file to another location on the same filesystem.
+        self._check_move_file(self.src_file, self.dst_file, self.dst_file)
+
+    def test_move_file_to_dir(self):
+        # Move a file inside an existing dir on the same filesystem.
+        self._check_move_file(self.src_file, self.dst_dir, self.dst_file)
+
+    def test_move_file_other_fs(self):
+        # Move a file to an existing dir on another filesystem.
+        if not self.dir_other_fs:
+            # skip
+            return
+        self._check_move_file(self.src_file, self.file_other_fs,
+            self.file_other_fs)
+
+    def test_move_file_to_dir_other_fs(self):
+        # Move a file to another location on another filesystem.
+        if not self.dir_other_fs:
+            # skip
+            return
+        self._check_move_file(self.src_file, self.dir_other_fs,
+            self.file_other_fs)
+
+    def test_move_dir(self):
+        # Move a dir to another location on the same filesystem.
+        dst_dir = tempfile.mktemp()
+        try:
+            self._check_move_dir(self.src_dir, dst_dir, dst_dir)
+        finally:
+            try:
+                shutil.rmtree(dst_dir)
+            except:
+                pass
+
+    def test_move_dir_other_fs(self):
+        # Move a dir to another location on another filesystem.
+        if not self.dir_other_fs:
+            # skip
+            return
+        dst_dir = tempfile.mktemp(dir=self.dir_other_fs)
+        try:
+            self._check_move_dir(self.src_dir, dst_dir, dst_dir)
+        finally:
+            try:
+                shutil.rmtree(dst_dir)
+            except:
+                pass
+
+    def test_move_dir_to_dir(self):
+        # Move a dir inside an existing dir on the same filesystem.
+        self._check_move_dir(self.src_dir, self.dst_dir,
+            os.path.join(self.dst_dir, os.path.basename(self.src_dir)))
+
+    def test_move_dir_to_dir_other_fs(self):
+        # Move a dir inside an existing dir on another filesystem.
+        if not self.dir_other_fs:
+            # skip
+            return
+        self._check_move_dir(self.src_dir, self.dir_other_fs,
+            os.path.join(self.dir_other_fs, os.path.basename(self.src_dir)))
+
+    def test_existing_file_inside_dest_dir(self):
+        # A file with the same name inside the destination dir already exists.
+        with open(self.dst_file, "wb"):
+            pass
+        self.assertRaises(shutil.Error, shutil.move, self.src_file, self.dst_dir)
+
+    def test_dont_move_dir_in_itself(self):
+        # Moving a dir inside itself raises an Error.
+        dst = os.path.join(self.src_dir, "bar")
+        self.assertRaises(shutil.Error, shutil.move, self.src_dir, dst)
+
+
 
 def test_main():
-    test_support.run_unittest(TestShutil)
+    test_support.run_unittest(TestShutil, TestMove)
 
 if __name__ == '__main__':
     test_main()
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 9e285bf..5662a93 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -1150,6 +1150,10 @@
 		-o -name MANIFEST \
 		-o -print
 
+# Perform some verification checks on any modified files.
+check:
+	./$(BUILDPYTHON) $(srcdir)/Tools/scripts/patchcheck.py
+
 # Dependencies
 
 Python/thread.o: @THREADHEADERS@
diff --git a/Modules/_fileio.c b/Modules/_fileio.c
index 7490ed6..9868e56 100644
--- a/Modules/_fileio.c
+++ b/Modules/_fileio.c
@@ -104,11 +104,7 @@
 	if (self->fd < 0)
 		return 0;
 	if (fstat(self->fd, &buf) == 0 && S_ISDIR(buf.st_mode)) {
-#ifdef HAVE_STRERROR
 		char *msg = strerror(EISDIR);
-#else
-		char *msg = "Is a directory";
-#endif
 		PyObject *exc;
 		internal_close(self);
 
@@ -295,12 +291,8 @@
 	if (self->fd >= 0 && self->closefd) {
 		errno = internal_close(self);
 		if (errno < 0) {
-#ifdef HAVE_STRERROR
 			PySys_WriteStderr("close failed: [Errno %d] %s\n",
                                           errno, strerror(errno));
-#else
-			PySys_WriteStderr("close failed: [Errno %d]\n", errno);
-#endif
 		}
 	}
 
diff --git a/Modules/main.c b/Modules/main.c
index ce05431..9f0b01c 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -507,13 +507,9 @@
 
 		if (sts==-1 && filename!=NULL) {
 			if ((fp = fopen(filename, "r")) == NULL) {
-#ifdef HAVE_STRERROR
 				fprintf(stderr, "%s: can't open file '%s': [Errno %d] %s\n",
 					argv[0], filename, errno, strerror(errno));
-#else
-				fprintf(stderr, "%s: can't open file '%s': Errno %d\n",
-					argv[0], filename, errno);
-#endif
+
 				return 2;
 			}
 			else if (skipfirstline) {
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 118e67b..3e91f00 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -5239,7 +5239,6 @@
 }
 #endif /* unsetenv */
 
-#ifdef HAVE_STRERROR
 PyDoc_STRVAR(posix_strerror__doc__,
 "strerror(code) -> string\n\n\
 Translate an error code to a message string.");
@@ -5259,7 +5258,6 @@
 	}
 	return PyUnicode_FromString(message);
 }
-#endif /* strerror */
 
 
 #ifdef HAVE_SYS_WAIT_H
@@ -6977,9 +6975,7 @@
 #ifdef HAVE_UNSETENV
 	{"unsetenv",	posix_unsetenv, METH_VARARGS, posix_unsetenv__doc__},
 #endif
-#ifdef HAVE_STRERROR
 	{"strerror",	posix_strerror, METH_VARARGS, posix_strerror__doc__},
-#endif
 #ifdef HAVE_FCHDIR
 	{"fchdir",	posix_fchdir, METH_O, posix_fchdir__doc__},
 #endif
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index aed8bb8..e2f384b 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -2922,15 +2922,10 @@
 	}
 
 	if (h->h_addrtype != af) {
-#ifdef HAVE_STRERROR
 		/* Let's get real error message to return */
 		PyErr_SetString(socket_error,
 				(char *)strerror(EAFNOSUPPORT));
-#else
-		PyErr_SetString(
-			socket_error,
-			"Address family not supported by protocol family");
-#endif
+
 		return NULL;
 	}
 
diff --git a/Tools/scripts/patchcheck.py b/Tools/scripts/patchcheck.py
new file mode 100644
index 0000000..4ad45a1
--- /dev/null
+++ b/Tools/scripts/patchcheck.py
@@ -0,0 +1,90 @@
+import os.path
+import subprocess
+import sys
+
+import reindent
+
+
+def status(message, modal=False, info=None):
+    """Decorator to output status info to stdout."""
+    def decorated_fxn(fxn):
+        def call_fxn(*args, **kwargs):
+            sys.stdout.write(message + ' ... ')
+            sys.stdout.flush()
+            result = fxn(*args, **kwargs)
+            if not modal and not info:
+                print("done")
+            elif info:
+                print(info(result))
+            else:
+                if result:
+                    print("yes")
+                else:
+                    print("NO")
+            return result
+        return call_fxn
+    return decorated_fxn
+
+@status("Getting the list of files that have been added/changed",
+            info=lambda x: "%s files" % len(x))
+def changed_files():
+    """Run ``svn status`` and return a set of files that have been
+    changed/added."""
+    cmd = 'svn status --quiet --non-interactive --ignore-externals'
+    svn_st = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
+    svn_st.wait()
+    output = [line.strip() for line in svn_st.stdout.readlines()]
+    files = set()
+    for line in output:
+        if not line[0] in ('A', 'M'):
+            continue
+        line_parts = line.split()
+        path = line_parts[-1]
+        if os.path.isfile(path):
+            files.add(path)
+    return files
+
+@status("Fixing whitespace", info=lambda x: "%s files" % x)
+def normalize_whitespace(file_paths):
+    """Make sure that the whitespace for .py files have been normalized."""
+    reindent.makebackup = False  # No need to create backups.
+    result = list(map(reindent.check, (x for x in file_paths if x.endswith('.py'))))
+    return sum(result)
+
+@status("Docs modified", modal=True)
+def docs_modified(file_paths):
+    """Report if any files in the Docs directory."""
+    for path in file_paths:
+        if path.startswith("Doc"):
+            return True
+    return False
+
+@status("Misc/ACKS updated", modal=True)
+def credit_given(file_paths):
+    """Check if Misc/ACKS has been changed."""
+    return True if 'Misc/ACKS' in file_paths else False
+
+@status("Misc/NEWS updated", modal=True)
+def reported_news(file_paths):
+    """Check if Misc/NEWS has been changed."""
+    return True if 'Misc/NEWS' in file_paths else False
+
+
+def main():
+    file_paths = changed_files()
+    # PEP 7/8 verification.
+    normalize_whitespace(file_paths)
+    # Docs updated.
+    docs_modified(file_paths)
+    # Misc/ACKS changed.
+    credit_given(file_paths)
+    # Misc/NEWS changed.
+    reported_news(file_paths)
+
+    # Test suite run and passed.
+    print()
+    print("Did you run the test suite?")
+
+
+if __name__ == '__main__':
+    main()
diff --git a/Tools/scripts/reindent.py b/Tools/scripts/reindent.py
index 11cb30a..981f63a 100755
--- a/Tools/scripts/reindent.py
+++ b/Tools/scripts/reindent.py
@@ -130,9 +130,11 @@
             f.close()
             if verbose:
                 print("wrote new", file)
+        return True
     else:
         if verbose:
             print("unchanged.")
+        return False
 
 def _rstrip(line, JUNK='\n \t'):
     """Return line stripped of trailing spaces, tabs, newlines.
