Revision 330fd618 image_creator/dialog_main.py

b/image_creator/dialog_main.py
78 78
    pass
79 79

  
80 80

  
81
class metadata_monitor(object):
82
    def __init__(self, session, meta):
83
        self.session = session
84
        self.meta = meta
85

  
86
    def __enter__(self):
87
        self.old = {}
88
        for (k, v) in self.meta.items():
89
            self.old[k] = v
90

  
91
    def __exit__(self, type, value, traceback):
92
        d = self.session['dialog']
93

  
94
        altered = {}
95
        added = {}
96

  
97
        for (k, v) in self.meta.items():
98
            if k not in self.old:
99
                added[k] = v
100
            elif self.old[k] != v:
101
                altered[k] = v
102

  
103
        if not (len(added) or len(altered)):
104
            return
105

  
106
        msg = "The last action has changed some image properties:\n\n"
107
        if len(added):
108
            msg += "New image properties:\n"
109
            for (k, v) in added.items():
110
                msg += '    %s: "%s"\n' % (k, v)
111
            msg += "\n"
112
        if len(altered):
113
            msg += "Updated image properties:\n"
114
            for (k, v) in altered.items():
115
                msg += '    %s: "%s" -> "%s"\n' % (k, self.old[k], v)
116
            msg += "\n"
117

  
118
        self.session['metadata'].update(added)
119
        self.session['metadata'].update(altered)
120
        d.msgbox(msg, title="Image Property Changes", width=MSGBOX_WIDTH)
121

  
122

  
81 123
def confirm_exit(d, msg=''):
82 124
    return not d.yesno("%s Do you want to exit?" % msg, width=YESNO_WIDTH)
83 125

  
......
590 632
                    if 'checksum' in session:
591 633
                        del session['checksum']
592 634

  
593
                    image_os.out = out
594
                    image_os.do_sysprep()
595

  
596
                    for (k, v) in image_os.meta.items():
597
                        session['metadata'][str(k)] = str(v)
635
                    # Monitor the metadata changes during syspreps
636
                    with metadata_monitor(session, image_os.meta):
637
                        image_os.out = out
638
                        image_os.do_sysprep()
639
                        image_os.out.finalize()
598 640

  
599 641
                    # Disable syspreps that have ran
600 642
                    for sysprep in session['exec_syspreps']:
601 643
                        image_os.disable_sysprep(sysprep)
602 644

  
603
                    image_os.out.finalize()
604 645
                finally:
605 646
                    dev.umount()
606 647
            finally:
......
626 667

  
627 668
    if not d.yesno("%s\n\nDo you want to continue?" % msg, width=70,
628 669
                   height=12, title="Image Shrinking"):
629
        dev.out = InfoBoxOutput(d, "Image Shrinking", height=3)
630
        session['metadata']['SIZE'] = str(dev.shrink())
670

  
671
        with metadata_monitor(session, dev.meta):
672
            dev.out = InfoBoxOutput(d, "Image Shrinking", height=3)
673
            dev.shrink()
674
            dev.out.finalize()
675

  
631 676
        session['shrinked'] = True
632 677
        update_background_title(session)
633
        dev.out.finalize()
634 678

  
635 679

  
636 680
def customization_menu(session):

Also available in: Unified diff