Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2012 Red Hat, Inc. and/or its affiliates.
   *
   * Licensed under the Eclipse Public License version 1.0, available at
   * http://www.eclipse.org/legal/epl-v10.html
   */
  
  package org.jboss.forge.git.gitignore;
  
 
 
Creates .gitignore files based on GitHub templates. Credits to the gibo shell script by Simon Whitaker for the idea.

Author(s):
Thomas Hug
 
 @Alias("gitignore")
 @Help("Creates .gitignore files based on template files from https://github.com/github/gitignore.git.")
 public class GitIgnore implements Plugin
 {
    @Inject
    private GitIgnoreConfig config;
    
    @Inject
    private Shell shell;
    
    @Inject
    private ShellPrompt prompt;
    
    @Inject
    private ResourceFactory factory;
    
    @Inject
    private Event<InstallFacetsrequest;
    
    @Inject
    private Event<PickupResourcepickUp;
    
    @Inject
    private Project project;
 
    @SetupCommand(help = "Clones the .gitignore template repository " +
    		"into a local destination.")
    public void setup() {
       try
       {
          promptCloneDir();
          promptRepository();
          .fire(new InstallFacets(GitIgnoreFacet.class));
       }
       catch (Exception e)
       {
          ShellMessages.error("Failed to create gitignore repository: " + e.getMessage());
       }
    }
 
    @Command(value = "list-templates", help = "List all available .gitignore templates")
    public void list(PipeOut out)
    {
       ShellMessages.info("Installed .gitignore templates:");
       for (GitIgnoreTemplateGroup group : .getFacet(GitIgnoreFacet.class).list())
       {
          out.println("============= " + group.getName() +  " =============");
          for (String template : group.getTemplates())
          {
             out.println(template);
          }
       }
    }
    
    @Command(value = "create", help = "Create a .gitignore from templates")
    public void create(PipeOut out,
            @Option(required = true,
                    completer = GitIgnoreTemplateCompleter.class)
            String... templates)
   {
      try
      {
         GitIgnoreFacet facet = .getFacet(GitIgnoreFacet.class);
         GitIgnoreResource resource = gitIgnoreResource();
         StringBuffer buffer = new StringBuffer();
         for (String template : templates)
         {
            String content = facet.contentOf(template);
            buffer.append(content);
         }
         String content = buffer.toString();
         resource.setContents(content);
         ShellMessages.success("Wrote to .gitignore. Content:");
         out.println(content);
         .fire(new PickupResource(resource));
      }
      catch (Exception e)
      {
         ShellMessages.error("Failed writing .gitignore: " + e.getMessage());
      }
   }
   
   @Command(value = "update-repo", help = "Update the local template repository")
   public void update()
   {
      try
      {
         .getFacet(GitIgnoreFacet.class).update();
         ShellMessages.success("Local gitignore repository updated.");
      }
      catch (IOException e)
      {
         ShellMessages.error("Error reading local repository: " + e.getMessage());
      }
      catch (GitAPIException e)
      {
         ShellMessages.error("Error pulling remote repository: " + e.getMessage());
      }
   }
   
   @Command(value = "edit", help = "Change the .gitignore file")
   public void edit()
   {
   }
   
   private void promptCloneDir()
   {
      FileResource<?> checkout = .promptFile("Where should the gitignore" +
            " template repository be installed at?"defaultDirectory());
      if (checkout.exists()) {
         validate(checkout);
      } else {
         checkout.mkdir();
      }
   }
   
   private void promptRepository()
   {
      String repo = .prompt("Do you want to provide a different repository" +
      		" location for gitignore templates?".defaultRemoteRepository());
      .setRemoteRepository(repo);
   }
   private FileResource<?> defaultDirectory()
   {
   }
   private void validate(FileResource<?> clone)
   {
      if (!clone.isDirectory())
      {
         throw new IllegalArgumentException("File " + clone + " is not a directory.");
      }
      if (!clone.listResources().isEmpty())
      {
         throw new IllegalArgumentException("Directory " + clone + " is not empty");
      }
   }
   
   {
      GitIgnoreResource resource = .getProjectRoot().getChildOfType(GitIgnoreResource.class".gitignore");
      if (!resource.exists()) {
         resource.createNewFile();
      }
      return resource;
   }
New to GrepCode? Check out our FAQ X