package aQute.bnd.plugin.git;

import java.io.File;
import java.io.IOException;
import java.util.Formatter;

import aQute.bnd.annotation.plugin.BndPlugin;
import aQute.bnd.build.Project;
import aQute.bnd.osgi.Constants;
import aQute.bnd.service.lifecycle.LifeCyclePlugin;
import aQute.lib.io.IO;

/**
 * Adds .gitignore files to projects when created.
 */
@BndPlugin(name = "Git", hide = true)
public class GitPlugin extends LifeCyclePlugin {

	private static final String GITIGNORE = ".gitignore";

	@Override
	public void created(Project p) throws Exception {
		Formatter f = new Formatter();
		f.format("/%s/\n", p.getProperty(Constants.DEFAULT_PROP_TARGET_DIR, "generated"));
		f.format("/%s/\n", p.getProperty(Constants.DEFAULT_PROP_BIN_DIR, "bin"));
		f.format("/%s/\n", p.getProperty(Constants.DEFAULT_PROP_TESTBIN_DIR, "bin_test"));

		IO.store(f.toString(), p.getFile(GITIGNORE));
		f.close();

		//
		// Add some .gitignore to keep empty directories alive
		//
		for (File dir : p.getSourcePath()) {
			touch(dir);
		}

		touch(p.getTestSrc());
	}

	private void touch(File dir) throws IOException {
		IO.mkdirs(dir);
		IO.store("", new File(dir, GITIGNORE));
	}

	@Override
	public String toString() {
		return "GitPlugin";
	}
}
