コード例 #1
0
ファイル: versioning.py プロジェクト: G-Node/nerd
    def save_section(self, section, section_type):
        #create new section
        if (section_type == "latest"):
            s = LatestSection()
            print "[[[LATEST]]]"
        elif (section_type == "old"):
            s = OldSection()
            print "{{{OLD}}}"
        else:
            s = TempSection()
            print "(((TEMP)))"

        s.object_id  = section.object_id
        # print "OBJECT_ID: " + str(s.object_id)

        s.name       = section.name
        # print "NAME: " + str(s.name)

        s.type_name  = section.type_name
        s.reference  = section.reference
        s.definition = section.definition
        s.repository = section.repository
        s.mapping    = section.mapping
        s.link       = section.link
        s.include    = section.include

        s.parent     = section.parent
    
        # PROPERTIES SAVE
        self.rewrite_properties(section, s)
    
        # recursively add subsections
        # print "add subsections"
        for sec in section.subsections:
            # print "subsection_id =>  " + sec
            
            if (section_type == "latest"):

                section = TempSection.objects(object_id = sec)[0]
                # print "subsection_name : " + str(section)

                s.subsections.append(self.save_section(section, "latest"))
            
            elif (section_type == "old"):
                # print "subsection_name" + str(LatestSection.objects(object_id = sec)[0].name)
                s.subsections.append(self.save_section(LatestSection.objects(object_id = sec)[0], "old"))

            else:
                # print "subsection_name" + str(OldSection.objects(object_id = sec)[0].name)
                s.subsections.append(self.save_section(OldSection.objects(object_id = sec)[0], "temp"))

        
        # print "end. (" + str(s.sid()) + ") { " + str(s.name) + " }\n"
            
        s.sid()
    
        # parent hash changed after subsections were added
        # so parent hash need to be updated for every subsection
        for subsection in s.subsections:
            # print "[[ " + str(LatestSection.objects(object_id=section)) + " ]]"
            if (section_type == "latest"):
                temp = LatestSection.objects(object_id=subsection)[0]
            elif (section_type == "old"):
                temp = OldSection.objects(object_id=subsection)[0]
            else:
                temp = TempSection.objects(object_id=subsection)[0]

            temp.parent = s.sid()
            temp.save()   

        # save section in database
        # print "SID! for: " + str(s.name)
        # print s.sid()
        # print "END!\n\n"

        s.save()

        #return id
        self.to_delete.append(section)
        print s.name + " --> DEL"
        return s.sid()
コード例 #2
0
ファイル: versioning.py プロジェクト: G-Node/nerd
    def switch_to_last(self, root_id):

        print "\n --------------------- VERSION MANAGER ----------------------- \n"
        v = Version() 

        # take root object
        root = Root.objects(id=root_id)[0]

        # take it ancestor (as object)
        previous_root = Root.objects(id=root.previous)[0]

        # list for sections storage
        current_sections = []
        old_sections = []

        temp_collection = root.sections

        # add sections to temporary lists, recursively!
        while (len(temp_collection) != 0):
            next_collection = []
            
            for sec in temp_collection:
                current_sections.append(LatestSection.objects(object_id=sec)[0])

                for s in (LatestSection.objects(object_id=sec)[0]).subsections:
                    next_collection.append(s)

            temp_collection = next_collection

        # the same operation for ancestor

        temp_collection = previous_root.sections

        while (len(temp_collection) != 0):
            next_collection = []
            
            for sec in temp_collection:
                old_sections.append(OldSection.objects(object_id=sec)[0])

                for s in (OldSection.objects(object_id=sec)[0]).subsections:
                    next_collection.append(s)

            temp_collection = next_collection


        # old code, delete
        # for sec in previous_root.sections:
        #     old_sections.append(OldSection.objects(object_id=sec)[0])

        # move sections from old to temp

        old_counter = 0
        for s in old_sections: 
            if (TempSection.objects(object_id = s.object_id)).count() == 0:
                print "[ " + s.name + " -> TEMP]"
                v.save_section(s, "temp")
                # s.delete()
                # print "latest del"
                old_counter += 1

        # move sections from latest to old

        current_counter = 0
        for s in current_sections:
            if (OldSection.objects(object_id = s.object_id)).count() == 0:
                print "[ " + s.name + " -> OLD]"
                v.save_section(s, "old")
                # s.delete()
                # print "old del"
                current_counter += 1

        # move sections from temp to latest
        for x in range(0,7):
            print "----------------------"

        temp_counter = 0
        for sec in TempSection.objects():
            print str(sec.id) + " : " + str(sec.name) + " : " + str(sec.object_id)
            for subsec in sec.subsections:
                print "sub:  " + subsec
            print " "
            temp_counter += 1

        print "~~~ \n"
        print "old_counter == " + str(old_counter)
        print "current_counter == " + str(current_counter)
        print "temp_counter == " + str(temp_counter)
        print "current_sections == " + str(len(old_sections))
        print "old_sections == " + str(len(current_sections))

        for s in TempSection.objects():
            # print "s.name == " + str(s.name)
            if (LatestSection.objects(object_id = s.object_id)).count() == 0:
                print "[ " + s.name + " -> LATEST]"
                v.save_section(s, "latest")
                # s.delete()
                # print "temp del"
        
        v.clear_trash()