Repository: pypa/setuptools_scm

Issue:
untracked files in git are creating dirty state
In Mercurial and in Git prior to the fix for #86 released with setuptools_scm 1.13.1, untracked files would not cause a `dirty` state, but since 1.13.1, they do.

```
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
  (use "git add <file>..." to include in what will be committed)

	.tox/

nothing added to commit but untracked files present (use "git add" to track)
$ python -m pip install setuptools_scm==1.13.0
Collecting setuptools_scm==1.13.0
  Downloading setuptools_scm-1.13.0-py2.py3-none-any.whl
Installing collected packages: setuptools-scm
Successfully installed setuptools-scm-1.13.0
$ python setup.py --quiet sdist
$ ls dist
rwt-2.13.tar.gz
$ python -m pip uninstall -y setuptools_scm
Uninstalling setuptools-scm-1.13.0:
  Successfully uninstalled setuptools-scm-1.13.0
$ python setup.py --quiet sdist            
$ ls dist
rwt-2.13.tar.gz					rwt-2.14.dev0+ngd08ab93.d20161012.tar.gz
```

My opinion and the expectation of environments based on past behavior is that untracked files shouldn't create a dirty state. Only modified files or perhaps staged files should cause the project to detect as dirty. The `git describe` output seems to be the same before and after removing the untracked files.

```
$ git describe --tags --long   
2.13-0-gd08ab93
$ rm -R .tox
$ git describe --tags --long
2.13-0-gd08ab93
```

Discussion:

Patch:
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 3239187..385ac83 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,3 +1,12 @@
+v1.14.1
+=======
+
+* fix #109: when detecting a dirty git workdir
+            don't consider untracked file
+            (this was a regression due to #86 in v1.13.1)
+* consider the distance 0 when the git node is unknown
+  (happens when you haven't commited anything)
+
 v1.14.0
 =======
 
diff --git a/setuptools_scm/git.py b/setuptools_scm/git.py
index 10280e5..aa326f3 100644
--- a/setuptools_scm/git.py
+++ b/setuptools_scm/git.py
@@ -30,7 +30,7 @@ class GitWorkdir(object):
         return cls(real_wd)
 
     def is_dirty(self):
-        out, _, _ = self.do_ex("git status --porcelain")
+        out, _, _ = self.do_ex("git status --porcelain --untracked-files=no")
         return bool(out)
 
     def node(self):
@@ -50,7 +50,7 @@ def parse(root, describe_command=DEFAULT_DESCRIBE):
     dirty = wd.is_dirty()
 
     if rev_node is None:
-        return meta('0.0', dirty=dirty)
+        return meta('0.0', distance=0, dirty=dirty)
 
     out, err, ret = do_ex(describe_command, root)
     if ret:


Test patch:
diff --git a/testing/test_git.py b/testing/test_git.py
index c3ae002..7179a57 100644
--- a/testing/test_git.py
+++ b/testing/test_git.py
@@ -14,7 +14,7 @@ def wd(wd):
 
 
 def test_version_from_git(wd):
-    assert wd.version == '0.0'
+    assert wd.version == '0.1.dev0'
 
     wd.commit_testfile()
     assert wd.version.startswith('0.1.dev1+')
@@ -34,8 +34,12 @@ def test_version_from_git(wd):
 
 
 @pytest.mark.issue(108)
+@pytest.mark.issue(109)
 def test_git_worktree(wd):
     wd.write('test.txt', 'test2')
+    # untracked files dont change the state
+    assert wd.version == '0.1.dev0'
+    wd('git add test.txt')
     assert wd.version.startswith('0.1.dev0+d')