Index: /Users/jshell/Documents/Programming/setuptools-0.6/setuptools/command/sdist.py
===================================================================
--- /Users/jshell/Documents/Programming/setuptools-0.6/setuptools/command/sdist.py	(revision 56769)
+++ /Users/jshell/Documents/Programming/setuptools-0.6/setuptools/command/sdist.py	(working copy)
@@ -97,10 +97,61 @@
     else:
         log.warn("unrecognized .svn/entries format in %s", dirname)
 
+def _readfile(filename, mode='rU'):
+    """ A quick wrapper around file opening, reading, and closing. """
+    f = open(filename, mode)
+    try:
+        return f.read()
+    finally:
+        f.close()
 
+cvs_entry_pattern = re.compile(r"^\w?/([^/]+)/", re.M)
+# Entries.Log line => ``A D/directoryname////`` (add directory `directoryname`)
+#                  => ``R D/directoryname////`` (remove directory `directoryname`)
+cvs_entry_log_pattern = re.compile(r"^([AR])\s\w?/([^/]+)/", re.M)
+
+def cvs_entries_finder(dirname, filename):
+    """
+    This should be passed just the `CVS/Entries` file as filename. The code 
+    will then look for `CVS/Entries.Log` which may contain additional
+    information, including information about added or removed files and 
+    directories. In some CVS versions, it appears that freshly checked out
+    code may have all of the subdirectories listed in Entries.Log instead
+    of entries (although personal experience has shown that following up
+    a checkout with ``cvs up -dP`` seems to clear things up). -Jeff Shell
+
+    http://www.network-theory.co.uk/docs/cvsmanual/Workingdirectorystorage.html
+    """
+    entries_data = _readfile(filename)
+    entry_log_filename = os.path.join(os.path.dirname(filename), 'Entries.Log')
+    if os.path.exists(entry_log_filename):
+        entry_log_data = _readfile(entry_log_filename)
+    else:
+        entry_log_data = ""
+
+    entries = []
+    for match in cvs_entry_pattern.finditer(entries_data):
+        path = match.group(1)
+        entries.append(path)
+
+    # Go through Entries.Log and apply its directives.
+    for match in cvs_entry_log_pattern.finditer(entry_log_data):
+        command, path = match.group(1), match.group(2)
+        if command == 'A':
+            if path not in entries:
+                entries.append(path)
+        elif command == 'R':
+            if path in entries:
+                entries.remove(path)
+
+    for path in entries:
+        yield joinpath(dirname,path)
+    
+    
+
 finders = [
-    (convert_path('CVS/Entries'),
-        re_finder(re.compile(r"^\w?/([^/]+)/", re.M))),
+    (convert_path('CVS/Entries'), cvs_entries_finder),
+
     (convert_path('.svn/entries'), entries_finder),
     (convert_path('.svn/dir-props'), externals_finder),
     (convert_path('.svn/dir-prop-base'), externals_finder),  # svn 1.4
