Exemplo n.º 1
0
Arquivo: log.py Projeto: oguzalb/cit
def command(argv):
    initialized()
    if len(argv) != 1:
        help()
        sys.exit(1)

    if len(argv) == 1:
        branch_name = argv[0]
        branch = Branch.from_file(branch_name)
        if branch.sha1text is None:
            print >> sys.stderr, "Branch does not have the first commit"
            sys.exit(1)
        sha1text = branch.sha1text
    else:
        head = HEAD.from_file()
        sha1text = head.sha1

    commit = Commit.from_file(sha1text)

    while commit is not None:
        print "hash: %s\ntree: %s\nauthor: %s\nmessage: %s\n" % (
            commit.sha1, commit.treesha1, commit.author, commit.message)
        if commit.parent is not None:
            commit = Commit.from_file(commit.parent)
        else:
            commit = None
Exemplo n.º 2
0
def command(argv):
    initialized()
    if len(argv) < 1:
        help()
        sys.exit(1)

    ref = argv[0]
    match = re.match("(\w+)(~[1-9][0-9]*){0,1}", ref)
    if match is None:
        help()
        sys.exit(1)
    groups = match.groups()
    ref = groups[0]
    if ref == "HEAD":
        head = HEAD.from_file()
        ref = head.ref

    if groups[1] is None:
        prev_count = 0
    else:
        prev_count = int(groups[1][1:])

    head = HEAD.from_file()

    if head.sha1 is None:
        print >> sys.stderr, "Branch does not have the first commit"
        sys.exit(1)

    checkout_branch = Branch.from_file(ref)
    checkout_commit = Commit.from_file(checkout_branch.sha1text)
    for i in xrange(prev_count):
        if checkout_commit.parent is None:
            print >> sys.stderr, "Last commit doesn't have a parent"
            sys.exit()
        checkout_commit = Commit.from_file(checkout_commit.parent)
    staging = Index()
    staging.load(os.path.join(MYGIT_ROOTDIR, 'index'))
    target_commit_index = Index.from_tree(2, checkout_commit.treesha1)
    non_overwritable_files = staging.list_nonoverwritable_files_by_index(
        target_commit_index)
    if non_overwritable_files:
        print >> sys.stderr, "original file changed, you shouldn't write onto it %s" % non_overwritable_files
        sys.exit()
    current_head = HEAD.from_file()
    current_commit = Commit.from_file(current_head.sha1)
    current_index = Index.from_tree(2, current_commit.treesha1)
    staging.overwrite_repo(current_index, target_commit_index)
    target_commit_index.save(os.path.join(MYGIT_ROOTDIR, 'index'))
    new_head = HEAD()
    if not prev_count:
        new_head.ref = ref
        new_head.sha1 = checkout_commit.sha1
    else:
        new_head.sha1 = checkout_commit.sha1
    new_head.save()
Exemplo n.º 3
0
def command(argv):
    initialized()
    if len(argv) > 0:
        help()
        sys.exit(1)

    filename = os.path.join(MYGIT_ROOTDIR, 'index')
    index = Index()
    index.load(filename)
    sha1 = index.write_tree()
    print sha1
Exemplo n.º 4
0
Arquivo: add.py Projeto: oguzalb/cit
def command(argv):
    initialized()
    if len(argv) < 1:
        help()
        sys.exit(1)

    filename = argv[0]
    index = Index()
    index.load(os.path.join(MYGIT_ROOTDIR, 'index'))
    index.add_file(filename)
    index.save(os.path.join(MYGIT_ROOTDIR, 'index'))
Exemplo n.º 5
0
def command(argv):
    initialized()
    if len(argv) == 1:
        create_branch(argv[0])
        return

    if len(argv) == 0:
        list_branches()
        return

    help()
    sys.exit(1)
Exemplo n.º 6
0
def command(argv):
    initialized()
    if len(argv) > 0:
        help()
        sys.exit(1)

    filename = os.path.join(MYGIT_ROOTDIR, 'index')
    index = Index()
    index.load(filename)
    head = HEAD.from_file()
    if head.ref is None:
        commitsha1 = head.sha1
    else:
        branch = Branch.from_file(head.ref)
        commitsha1 = branch.sha1text

    commit = Commit.from_file(commitsha1)
    commitIndex = index.from_tree(2, commit.treesha1)

    removed, changed, added = index.differences(commitIndex)

    print "Added files:"
    print "\n".join(added) + "\n"
    print "Changed files:"
    print "\n".join(changed) + "\n"
    print "Removed files:"
    print "\n".join(removed) + "\n"

    fs_removed, fs_changed, fs_added = index.filesystem_differences()
    print "Changes not staged for commit"
    print "Added files:"
    print "\n".join(fs_added) + "\n"
    print "Changed files:"
    print "\n".join(fs_changed) + "\n"
    print "Removed files:"
    print "\n".join(fs_removed) + "\n"

    return ((removed, changed, added), (fs_removed, fs_changed, fs_added))
Exemplo n.º 7
0
def command(argv):
    initialized()
    if len(argv) < 2:
        help()
        sys.exit(1)

    object_type = argv[0]
    sha1text = argv[1]
    if object_type == "blob":
        blob = Blob.from_saved_blob(sha1text)
        print blob.original_content
    elif object_type == "tree":
        # version should be read from the file?
        tree = Index.from_tree(2, sha1text)
        for index_entry in tree.index_entries:
            print "%s %s" % (index_entry.sha1, index_entry)
    elif object_type == "commit":
        commit = Commit.from_file(sha1text)
        print "commit: %s\ntree: %s\nauthor: %s\nmessage: %s\nparent: %s" % (
            sha1text, commit.treesha1, commit.author, commit.message,
            commit.parent)
    else:
        print >> sys.stderr, "%s is not an object type" % object_type
Exemplo n.º 8
0
def command(argv):
    initialized()
    if len(argv) < 2 or argv[0] != '-m':
        help()
        sys.exit(1)
    message = argv[1]
    filename = os.path.join(MYGIT_ROOTDIR, 'index')
    index = Index()
    index.load(filename)
    sha1 = index.write_tree()
    head = HEAD.from_file()
    if head.ref is None:
        print >> sys.stderr, "the head is detached!"
        sys.exit(1)

    branch = Branch.from_file(head.ref)
    # parent will be fixed when branch is implemented
    commit = Commit(sha1, "Oguz", message, branch.sha1text)
    commitsha1 = commit.save()
    branch.sha1text = commitsha1
    branch.save()
    index.save(filename)
    print commitsha1
Exemplo n.º 9
0
Arquivo: diff.py Projeto: oguzalb/cit
def command(argv):
    initialized()
    if len(argv) > 0:
        help()
        sys.exit(1)

    filename = os.path.join(MYGIT_ROOTDIR, 'index')
    index = Index()
    index.load(filename)
    head = HEAD.from_file()
    if head.ref is None:
        commitsha1 = head.sha1
    else:
        branch = Branch.from_file(head.ref)
        commitsha1 = branch.sha1text

    commit = Commit.from_file(commitsha1)
    commit_index = index.from_tree(2, commit.treesha1)
    for new_file in commit_index.new_files(index):
        with open(new_file, "r") as f:
            for line in unified_diff([""], f.readlines(), fromfile=new_file, tofile=new_file):
                print line
    removed_files, changed_files = commit_index.changed_files()
    for changed_file in changed_files:
        index_entry = next(
            (i for i in commit_index.index_entries if i.name == changed_file), None)
        blob = Blob.from_saved_blob(index_entry.sha1)
        with open(changed_file, "r") as f:
            for line in unified_diff(blob.content.split(), f.readlines(), fromfile=changed_file, tofile=changed_file):
                print line
    for removed_file in removed_files:
        index_entry = next(
            (i for i in commit_index.index_entries if i.name == removed_file), None)
        blob = Blob.from_saved_blob(index_entry.sha1)
        for line in unified_diff(blob.content.split(), [""], fromfile=removed_file, tofile=removed_file):
            print line