diff --git a/checkin.py b/checkin.py index 1c27f15..8b85c38 100644 --- a/checkin.py +++ b/checkin.py @@ -2,7 +2,7 @@ from common import * from clearcase import cc -from status import Modify, Add, Delete, Rename, SymLink +from status import Modify, Add, Delete, Rename, RenameModify, SymLink import filecmp from os import listdir from os.path import isdir @@ -29,7 +29,7 @@ def main(force=False, no_deliver=False, initial=False, all=False, cclabel=''): if force: IGNORE_CONFLICTS=True cc_exec(['update', '.'], errors=False) - log = ['log', '-z', '--reverse', '--pretty=format:'+ LOG_FORMAT ] + log = ['log', '-z', '--reverse', '--topo-order', '--pretty=format:'+ LOG_FORMAT ] if not all: log.append('--first-parent') if not initial: @@ -50,6 +50,8 @@ def main(force=False, no_deliver=False, initial=False, all=False, cclabel=''): reset.main('HEAD') def getStatuses(id, initial): + modifylist = None + cmd = ['diff','--name-status', '-M', '-z', '--ignore-submodules', '%s^..%s' % (id, id)] if initial: cmd = cmd[:-1] @@ -58,11 +60,12 @@ def getStatuses(id, initial): status = git_exec(cmd) status = status.strip() status = status.strip("\x00") - types = {'M':Modify, 'R':Rename, 'D':Delete, 'A':Add, 'C':Add, 'S':SymLink} + types = {'M':Modify, 'R':Rename, 'RM': RenameModify, 'D':Delete, 'A':Add, 'C':Add, 'S':SymLink} list = [] split = status.split('\x00') while len(split) > 1: - char = split.pop(0)[0] # first char + statusstr = split.pop(0) + char = statusstr[0] # first char args = [split.pop(0)] # check if file is really a symlink cmd = ['ls-tree', '-z', id, '--', args[0]] @@ -71,6 +74,8 @@ def getStatuses(id, initial): args.append(id) if char == 'R': args.append(split.pop(0)) + if (statusstr[1:] != "100"): + char = "RM" elif char == 'C': args = [split.pop(0)] if args[0] == cache.FILE: @@ -80,6 +85,7 @@ def getStatuses(id, initial): list.append(type) return list + def checkout(stats, comment, initial): """Poor mans two-phase commit""" transaction = ITransaction(comment) if initial else Transaction(comment) diff --git a/status.py b/status.py index 795829c..2ffaa7a 100644 --- a/status.py +++ b/status.py @@ -51,6 +51,18 @@ def commit(self, t): cc_exec(['rm', self.file]) class Rename(Status): + def __init__(self, files): + self.old = files[0] + self.new = files[1] + self.setFile(self.new) + def stage(self, t): + t.stageDir(dirname(self.old)) + self.stageDirs(t) + def commit(self, t): + self.commitDirs(t) + cc_exec(['mv', '-nc', self.old, self.new]) + +class RenameModify(Rename): def __init__(self, files): self.old = files[0] self.new = files[1]