Gitlet / src / gitlet / Main.java
Main.java
Raw
package gitlet;

/** Driver class for Gitlet, a subset of the Git version-control system.
 *  @author Bassem Halim
 */
public class Main {

    /** Usage: java gitlet.Main ARGS, where ARGS contains
     *  <COMMAND> <OPERAND1> <OPERAND2> ... 
     */

    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("Please enter a command");
            System.exit(0);
        }

        String firstArg = args[0];
        if (firstArg.equals("init")) {
            validateNumArgs(args, 1);
            Repository.initialize();
        }

        Repository.isInit();
        switch (firstArg) {
            case "init":
                break;
            case "add":
                //TODO check if file content is the same as in head commit
                //TODO: check if staged for removal and remove it
                validateNumArgs(args, 2);
                String filename = args[1];
                Repository.add(filename);
                break;
            case "commit":
                if (args.length != 2 || args[1].isEmpty()) {
                    System.out.println("Please enter a commit message.");
                } else {

                    Repository.commit(args[1], null);
                }
                break;
            case "log":
                validateNumArgs(args, 1);
                Repository.log();
                break;
            case "checkout":
                switch (args.length) {
                    case 2: //java gitlet.Main checkout [branch name]
                        Repository.checkoutBranch(args[1], false, null);
                        break;
                    case 3: //java gitlet.Main checkout -- [file name]
                        verifiyOperand(args[1], "--");
                        Repository.checkout(args[2], null);
                        break;
                    case 4: //java gitlet.Main checkout [commit id] -- [file name]
                        verifiyOperand(args[2], "--");
                        Repository.checkout(args[3], args[1]);
                        break;
                    default:
                        System.out.println("Incorrect Operands.");
                }
                break;
            case "rm":
                validateNumArgs(args, 2);
                Repository.remove(args[1]);
                break;
            case "global-log":
                validateNumArgs(args, 1);
                Repository.globalLog();
                break;
            case "find":
                validateNumArgs(args, 2);
                String msg = args[1];
                Repository.find(msg);
                break;
            case "status":
                validateNumArgs(args, 1);
                Repository.status();
                break;
            case "branch": // gitlet branch [branch name]
                validateNumArgs(args, 2);
                Repository.branch(args[1]);
                break;
            case "rm-branch": //gitlet rm-branch [branch name]
                validateNumArgs(args, 2);
                Repository.rmBranch(args[1]);
                break;
            case "reset": //gitlet reset [commit ID]
                validateNumArgs(args, 2);
                Repository.reset(args[1]);
                break;
            case "merge": //gitlet merge [branch name]
                validateNumArgs(args, 2);
                Repository.merge(args[1]);
                break;
            default:
                System.out.println("No command with that name exists.");
        }

    }

    /**
     * Return True if we have the exact expected number of elements in args
     * @param args
     */
    private static void validateNumArgs(String[] args, int expected) {
        if (args.length != expected) {
            System.out.println("Incorrect Operands.");
            System.exit(0);
        }
    }

    private static void verifiyOperand(String arg, String expected){
        if (!arg.equals(expected)) {
            System.out.println("Incorrect Operands.");
            System.exit(0);
        }
    }

}