[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/xUser5000/gitlet/master/gitlet/gitlet/Commit.java [Back]  [Original]

package gitlet;

import java.io.File;
import java.io.Serializable;
import java.util.*;

import static gitlet.Utils.*;

/** Represents a gitlet commit object.
 *  @author xUser5000
 */
public class Commit implements Serializable, Dumpable, Comparable {
    private final String message;
    private final Date timestamp;
    /** Original parent from the  */
    private final String parent;
    private final String secondaryParent;

    private final Map trackedFiles;
    private final String hash;

    private Commit(String message, Date timestamp, String parent, String secondaryParent, Map trackedFiles) {
        this.message = message;
        this.timestamp = (timestamp != null) ? timestamp : new Date();
        this.parent = parent;
        this.secondaryParent = secondaryParent;
        this.trackedFiles = (trackedFiles != null) ? trackedFiles : new TreeMap();
        this.hash = generateHash();
    }

    @Override
    public int compareTo(Commit other) {
        return this.getHash().compareTo(other.getHash());
    }

    /* Builder class */
    public static class Builder {
        private String message;
        private Date timestamp;
        private String parent;
        private String secondaryParent;
        private Map trackedFiles;

        public Builder(String message) {
            this.message = message;
        }

        public Builder timestamp(Date timestamp) {
            this.timestamp = timestamp;
            return this;
        }

        public Builder parent(String parent) {
            this.parent = parent;
            return this;
        }

        public Builder secondaryParent(String secondaryParent) {
            this.secondaryParent = secondaryParent;
            return this;
        }

        public Builder trackedFiles(Map trackedFiles) {
            this.trackedFiles = trackedFiles;
            return this;
        }

        public Commit build() {
            return new Commit(message, timestamp, parent, secondaryParent, trackedFiles);
        }
    }

    private String generateHash() {
        List hashItems = new ArrayList();
        hashItems.add(message);
        hashItems.add(timestamp.toString());
        hashItems.add((parent == null) ? "" : parent);
        hashItems.add((secondaryParent == null) ? "" : secondaryParent);
        for (Map.Entry entry: trackedFiles.entrySet()) {
            hashItems.add(entry.toString());
        }
        return sha1(hashItems);
    }

    public Date getTimestamp() {
        return timestamp;
    }

    public String getMessage() {
        return message;
    }

    public String getParent() {
        return parent;
    }

    public String getSecondaryParent() {
        return secondaryParent;
    }

    public Map getTrackedFiles() {
        return trackedFiles;
    }

    public String getHash() {
        return hash;
    }

    public void saveCommit(File commitsDirectory) {
        File commitFile = join(commitsDirectory, hash);
        writeObject(commitFile, this);
    }

    public String log() {
        StringBuilder builder = new StringBuilder();
        builder.append("===\n");
        builder.append(String.format("commit %s\n", getHash()));
        if (getParent() != null && getSecondaryParent() != null) {
            builder.append(
                    String.format("Merge: %s %s\n",  getParent().substring(0, 7),  getSecondaryParent().substring(0, 7))
            );
        }
        Formatter formatter = new Formatter().format("Date: %1$ta %1$tb %1$td %1$tT %1$tY %1$tz", getTimestamp());
        String formattedDate = formatter.toString();
        builder.append(String.format("%s\n", formattedDate));
        builder.append(String.format("%s\n\n", getMessage()));
        return builder.toString();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Commit) {
            return ((Commit) obj).getHash().equals(this.getHash());
        }
        return false;
    }

    @Override
    public String toString() {
        return "Commit{" +
                "timestamp=" + timestamp +
                ", message='" + message + '\'' +
                ", parent='" + parent + '\'' +
                ", secondaryParent='" + secondaryParent + '\'' +
                ", trackedFiles=" + trackedFiles +
                ", hash='" + hash + '\'' +
                '}';
    }

    @Override
    public void dump() {
        System.out.println(this);
    }

}

Web Proxy Viewer  |  New URL  |  Original Page