mirror of https://github.com/sbt/sbt.git
delete empty parent directories of deleted class files. fixes #387
This commit is contained in:
parent
b865d88060
commit
868196e652
|
|
@ -143,7 +143,7 @@ object Incremental
|
||||||
|
|
||||||
def prune(invalidatedSrcs: Set[File], previous: Analysis): Analysis =
|
def prune(invalidatedSrcs: Set[File], previous: Analysis): Analysis =
|
||||||
{
|
{
|
||||||
IO.delete( invalidatedSrcs.flatMap(previous.relations.products) )
|
IO.deleteFilesEmptyDirs( invalidatedSrcs.flatMap(previous.relations.products) )
|
||||||
previous -- invalidatedSrcs
|
previous -- invalidatedSrcs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
package a.pkgName
|
||||||
|
|
||||||
|
object Test
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
package pkgName
|
||||||
|
|
||||||
|
object Test
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
package a
|
||||||
|
|
||||||
|
import pkgName.Test
|
||||||
|
|
||||||
|
object Use {
|
||||||
|
val x = Test
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
@ -304,6 +304,25 @@ object IO
|
||||||
/** Deletes each file or directory (recursively) in `files`.*/
|
/** Deletes each file or directory (recursively) in `files`.*/
|
||||||
def delete(files: Iterable[File]): Unit = files.foreach(delete)
|
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. */
|
/** Deletes `file`, recursively if it is a directory. */
|
||||||
def delete(file: File)
|
def delete(file: File)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue