delete empty parent directories of deleted class files. fixes #387

This commit is contained in:
Mark Harrah 2012-03-05 13:40:17 -05:00
parent b865d88060
commit 868196e652
6 changed files with 39 additions and 1 deletions

View File

@ -143,7 +143,7 @@ object Incremental
def prune(invalidatedSrcs: Set[File], previous: Analysis): Analysis =
{
IO.delete( invalidatedSrcs.flatMap(previous.relations.products) )
IO.deleteFilesEmptyDirs( invalidatedSrcs.flatMap(previous.relations.products) )
previous -- invalidatedSrcs
}

View File

@ -0,0 +1,3 @@
package a.pkgName
object Test

View File

@ -0,0 +1,3 @@
package pkgName
object Test

View File

@ -0,0 +1,7 @@
package a
import pkgName.Test
object Use {
val x = Test
}

View File

@ -0,0 +1,6 @@
$ copy-file changes/Define1.scala Define.scala
$ copy-file changes/Use.scala Use.scala
> compile
$ copy-file changes/Define2.scala Define.scala
> compile

View File

@ -304,6 +304,25 @@ object IO
/** Deletes each file or directory (recursively) in `files`.*/
def delete(files: Iterable[File]): Unit = files.foreach(delete)
/** Deletes each file or directory in `files` recursively. Any empty parent directories are deleted, recursively.*/
def deleteFilesEmptyDirs(files: Iterable[File]): Unit =
{
def isEmptyDirectory(dir: File) = dir.isDirectory && listFiles(dir).isEmpty
def parents(fs: Set[File]) = fs.map(_.getParentFile)
def deleteEmpty(dirs: Set[File])
{
val empty = dirs filter isEmptyDirectory
if(empty.nonEmpty) // looks funny, but this is true if at least one of `dirs` is an empty directory
{
empty foreach { _.delete() }
deleteEmpty(parents(empty))
}
}
delete(files)
deleteEmpty(parents(files.toSet))
}
/** Deletes `file`, recursively if it is a directory. */
def delete(file: File)
{