Univention Bugzilla – Attachment 3906 Details for
Bug 22898
UMC2: Online-Updates
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Behebt die restlichen Mängel
univention-updater-2011_11_28.patch (text/plain), 47.80 KB, created by
Frank Greif
on 2011-11-28 11:18 CET
(
hide
)
Description:
Behebt die restlichen Mängel
Filename:
MIME Type:
Creator:
Frank Greif
Created:
2011-11-28 11:18 CET
Size:
47.80 KB
patch
obsolete
>Index: umc/python/updater/de.po >=================================================================== >--- umc/python/updater/de.po (revision 5327) >+++ umc/python/updater/de.po (working copy) >@@ -3,7 +3,7 @@ > msgstr "" > "Project-Id-Version: univention-management-console-module-updater\n" > "Report-Msgid-Bugs-To: packages@univention.de\n" >-"POT-Creation-Date: 2011-10-29 23:07+0200\n" >+"POT-Creation-Date: 2011-11-25 13:23+0100\n" > "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" > "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" > "Language-Team: LANGUAGE <LL@li.org>\n" >@@ -12,25 +12,25 @@ > "Content-Type: text/plain; charset=UTF-8\n" > "Content-Transfer-Encoding: 8bit\n" > >-#: umc/python/updater/__init__.py:750 >+#: umc/python/updater/__init__.py:747 > #, python-format > msgid "At least one out of %s must be selected." > msgstr "Wenigstens eine der %s Kategorien muà ausgewählt werden." > >-#: umc/python/updater/__init__.py:1262 >+#: umc/python/updater/__init__.py:1267 > msgid "Component name is not allowed to be empty." > msgstr "Der Komponentenname muà angegeben werden." > >-#: umc/python/updater/__init__.py:756 >+#: umc/python/updater/__init__.py:753 > #, python-format > msgid "ERROR: %s" > msgstr "FEHLER: %s" > >-#: umc/python/updater/__init__.py:744 >+#: umc/python/updater/__init__.py:741 > msgid "Empty server name not allowed" > msgstr "Der Servername muà angegeben werden." > >-#: umc/python/updater/__init__.py:1267 >+#: umc/python/updater/__init__.py:1272 > #, python-format > msgid "Illegal character(s) in component name: '%s'" > msgstr "Unzulässige Zeichen (%s) im Komponentennamen." >@@ -57,14 +57,14 @@ > msgid "Perform release update up to version '%s'" > msgstr "Release auf Version '%s' aktualisieren" > >-#: umc/python/updater/__init__.py:1276 >+#: umc/python/updater/__init__.py:1281 > msgid "There is already a component with this name" > msgstr "Es gibt bereits eine Komponente mit diesem Namen" > >-#: umc/python/updater/__init__.py:322 >+#: umc/python/updater/__init__.py:318 > msgid "latest version" > msgstr "neueste Version" > >-#: umc/python/updater/__init__.py:512 >+#: umc/python/updater/__init__.py:509 > msgid "unknown" > msgstr "unbekannt" >Index: umc/python/updater/__init__.py >=================================================================== >--- umc/python/updater/__init__.py (revision 5327) >+++ umc/python/updater/__init__.py (working copy) >@@ -39,7 +39,7 @@ > > import re > import string >-from os import stat,listdir,chmod,unlink,path,getpid >+from os import stat,listdir,chmod,unlink,path,getpid,getppid > from locale import nl_langinfo,D_T_FMT > from time import strftime,localtime,sleep,time > from subprocess import Popen >@@ -222,14 +222,14 @@ > self._unchanged_count = 0 > self._last_stamp = max > >- return self._last_returned_stamp >+ return self._last_returned_stamp > > class Instance(umcm.Base): > def __init__( self ): > umcm.Base.__init__( self ) > > self.init_called = False >- >+ > def init(self): > try: > if self.init_called: >@@ -238,10 +238,6 @@ > self.init_called = True > MODULE.info("Initializing 'updater' module (PID = %d, LANG = '%s')" % (getpid(),self.locale)) > >- MODULE.info("(not defining workaround for translation)") >-# global _ >-# _ = umc.Translation('univention-management-console-module-updater',self.locale).translate >- > self.uu = UniventionUpdater(False) > self.ucr = univention.config_registry.ConfigRegistry() > self.ucr.load() >@@ -251,10 +247,10 @@ > > self._serial_file = Watched_File(COMPONENTS_SERIAL_FILE) > self._updates_serial = Watched_Files(UPDATE_SERIAL_FILES) >- >+ > except Exception, ex: > MODULE.error("init() ERROR: %s" % str(ex)) >- >+ > def query_components(self,request): > """ Returns components list for the grid in the ComponentsPage. > """ >@@ -406,6 +402,7 @@ > MODULE.info(" << %s" % s) > # ----------------------------------- > >+ > # umc.widgets.Form wraps the real data into an array: > # > # [ >@@ -822,9 +819,6 @@ > # ----------------------------------- > > result = self.__which_job_is_running() >- # If we have seen a job before: mark it as finished >- if result == '': >- self._current_job['running'] = False > > # ----------- DEBUG ----------------- > MODULE.info("updater/installer/running returns:") >@@ -882,8 +876,8 @@ > result = self._logstamp(fname) > else: > # don't read complete file if we have an 'ignore' count >- if (count == 0) and (self._current_job['lines']): >- count = -self._current_job['lines'] >+ if (count == 0) and ('lines' in self._current_job) and (self._current_job['lines']): >+ count = -int(self._current_job['lines']) > result = self._logview(fname, count) > > # again debug, shortened >@@ -935,7 +929,7 @@ > if 'statusfile' in INSTALLERS[job]: > try: > for line in open(INSTALLERS[job]['statusfile']): >- fields = line.split('=') >+ fields = line.strip().split('=') > if len(fields) == 2: > result['_%s_' % fields[0]] = fields[1] > except: >@@ -1036,6 +1030,14 @@ > MODULE.warn(result['message']) > self.finished(request.id,result) > return >+ >+ # initial values of current job >+ self._current_job = { >+ 'job': subject, >+ 'detail': detail, >+ 'logfile': '', >+ 'lines': 0 >+ } > > # We want to limit the amount of logfile data being transferred > # to the frontend. So we remember the line count of the associated >@@ -1052,6 +1054,7 @@ > if file != None: > file.close() > self._current_job['lines'] = count >+ self._current_job['logfile'] = fname > > try: > # Assemble the command line, now somewhat complicated: >@@ -1062,7 +1065,9 @@ > # (4) if the subject is about 'component' we must get the 'defaultpackages' > # entry from the UCR tuple named by 'detail' and use that. > # (5) if not, we can format the 'detail' field into the command. >+ # > # cmd = '%s' % INSTALLERS[subject]['command'] # I need a copy of this string! >+ # > cmd = INSTALLERS[subject]['command'] > if cmd.find('%') != -1: > if subject == 'component': >@@ -1369,9 +1374,13 @@ > and how long it is running. > """ > started = int(time()) >+ logfile = self._current_job['logfile'] >+ lines = self._current_job['lines'] > script = ''' > #:started: %s > #:detail: %s >+#:logfile: %s >+#:lines: %s > #:command: %s > dpkg-statoverride --add root root 0644 /usr/sbin/univention-management-console-web-server > dpkg-statoverride --add root root 0644 /usr/sbin/univention-management-console-server >@@ -1382,7 +1391,7 @@ > dpkg-statoverride --remove /usr/sbin/univention-management-console-server > dpkg-statoverride --remove /usr/sbin/apache2 > chmod +x /usr/sbin/univention-management-console-server /usr/sbin/univention-management-console-web-server /usr/sbin/apache2 >-''' % (started,detail,command,command) >+''' % (started,detail,logfile,lines,command,command) > p1 = subprocess.Popen( [ 'LC_ALL=C at now', ], stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True ) > (stdout,stderr) = p1.communicate( script ) > >@@ -1419,7 +1428,13 @@ > for line in atout.split("\n"): > match = re.search('^\#\:([a-z]+)\:\s(.*)$',line) > if (match): >- self._current_job[match.group(1)] = match.group(2) >+ var = match.group(1) >+ val = match.group(2) >+ # restore numeric strings into numbers! >+ if val.isdigit(): >+ self._current_job[var] = int(val) >+ else: >+ self._current_job[var] = val > return inst > return '' > >@@ -1434,16 +1449,4 @@ > if command in atout: > return True > return False >- >-# def __is_updater_running(self): >-# return self.__is_process_running( 'univention-updater net' ) >-# >-# >-# def __is_errata_update_running(self): >-# return self.__is_process_running( 'univention-errata-update net' ) >-# >-# >-# def __is_dist_upgrade_running(self): >-# return self.__is_process_running( 'univention-updater-umc-dist-upgrade' ) >- >- >+ >Index: umc/js/updater.js >=================================================================== >--- umc/js/updater.js (revision 5327) >+++ umc/js/updater.js (working copy) >@@ -121,6 +121,7 @@ > > // waits for the Progress Page to notify us that a job is finished. This > // should immediately refresh the 'Updates' and 'Components' pages. >+ // XXX can remain this way > dojo.connect(this._progress,'jobFinished',dojo.hitch(this, function() { > this._updates.refreshPage(true); > this._components.refreshPage(); >@@ -225,7 +226,6 @@ > confirm: this._("Do you really want to upgrade your system?") > }); > })); >- > }, > > // We defer these actions until the UI is readily rendered >@@ -304,7 +304,7 @@ > name: 'cancel' > }, > { >- label: this._('Start!'), >+ label: this._('Install'), > name: 'start', > 'default': true > } >Index: umc/js/_updater/SettingsPage.js >=================================================================== >--- umc/js/_updater/SettingsPage.js (revision 5327) >+++ umc/js/_updater/SettingsPage.js (working copy) >@@ -164,6 +164,12 @@ > maintained: true, > unmaintained: false > }); >+ }, >+ >+ // Let's fetch the current values again directly before we show the form. >+ onShow: function() { >+ >+ this._form.load('dummy'); // ID doesn't matter here but must be nonempty > } > > }); >Index: umc/js/_updater/ProgressPage.js >=================================================================== >--- umc/js/_updater/ProgressPage.js (revision 5327) >+++ umc/js/_updater/ProgressPage.js (working copy) >@@ -58,22 +58,22 @@ > > _job_key: '', // the key of the currently running job > >- postMixInProperties: function() { >- this.inherited(arguments); >+ postMixInProperties: function() { >+ >+ this.inherited(arguments); >+ >+ // If I don't do that -> the page will switch 'show module help description' off >+ dojo.mixin(this,{ >+ helpText: ' ' >+ }); >+ }, > >- dojo.mixin(this, { >- title: this._("Update in progress"), >- headerText: this._("Univention Updater is working"), >- helpText: this._("As long as the Univention Updater is updating your system, you're not allowed to manage settings or components. You may watch the progress, or close the module.") >- }); >- }, >- > buildRendering: function() { > > this.inherited(arguments); > > this._pane = new umc.widgets.ExpandingTitlePane({ >- title: this._("Progress information") >+ title: this._("Log file view") > }); > this.addChild(this._pane); > >@@ -99,7 +99,7 @@ > > // returns to the calling page > this._close = new umc.widgets.Button({ >- label: this._("back to overview"), >+ label: this._("back"), > region: 'bottom', > onClick: dojo.hitch(this, function() { > var tab = ''; >@@ -110,7 +110,6 @@ > // logic will revert to the first tab of our tab set. > if (this._reboot_required) > { >- //alert("Resetting return tab to 'Updates'"); > this.last_tab = null; > } > if (this.last_tab) >@@ -170,6 +169,17 @@ > this._allow_close(false); // close button now invisible. > } > } >+ if (data.result != '') >+ { >+ // start the first call for 'update/installer/status' if we got a job name >+ if ((this._interval) && (! this._timer)) >+ { >+ this._timer = window.setTimeout(dojo.hitch(this, function() { >+ this._timer = ''; >+ this._query_job_status(); >+ }),this._interval); >+ } >+ } > } > else > { >@@ -188,84 +198,44 @@ > } > msg = msg + "<br/> <br/>"; > >- msg += this._statusfile_data(data.result); > >- // -------------- DEBUG ------------------ >-// for (var v in this._last_job) >-// { >-// msg += ("<br/> " + v + " = '" + this._last_job[v] + "'"); >-// } >- // --------------------------------------- >- > this._head.set('content',msg); > > if (! data.result['running']) > { >+ } >+ >+ if (data.result['running']) >+ { >+ // reschedule this as long as the job runs. >+ if ((this._interval) && (! this._timer)) >+ { >+ this._timer = window.setTimeout(dojo.hitch(this, function() { >+ this._timer = ''; >+ this._query_job_status(); >+ }),this._interval); >+ } >+ } >+ else >+ { > this._allow_close(true); // does the rest. > } > > this._pane.layout(); >+ > } > } > >- // establish the next call. Note this will be active as long >- // as the module is open. >- // >- // if this is called from outside (by means of 'startPolling()' we must >- // make sure that only one timer is active at any given time. >- if ((this._interval) && (! this._timer)) >- { >- this._timer = window.setTimeout(dojo.hitch(this, function() { >- this._timer = ''; >- this._query_job_status(); >- }),this._interval); >- } > }, > >- // takes a status structure as returned from the 'updater/installer/status' call, >- // extracts the fields that came directly from the status file (if any) and >- // formats them into a one-liner. Returns an empty string if nothing matches. >- // >- // FOR TEST: now includes the 'reboot' flag if it is present. >- _statusfile_data: function(data) { >- >- var txt = ''; >- >- for (var f in data) >- { >- // These fields are wrapped into underscores >- if ((f.substr(0,1) == '_') && (f.substr(-1,1) == '_')) >- { >- if (txt.length) { txt += ','; } >- txt += ' ' + f.substr(1,f.length-2) + "=" + data[f]; >- } >- } >- >- if (data['reboot']) >- { >- txt += ' [REBOOT] '; >- if (! this._reboot_required) // not set or not true >- { >- //alert("Setting REBOOT from _statusfile_data"); >- this._reboot_required = true; >- } >- } >- >- if (txt != '') >- { >- txt = "(" + this._("Current status file content") + ":" + txt + ")<br/>"; >- } >- >- return txt; >- }, >- > // queries job status. As long as we know a job key -> ask for full > // details. The handler _process_job_status() handles this gracefully. > _query_job_status: function() { > > if (this._job_key == '') > { >- umc.tools.umcpCommand('updater/installer/running',{},false).then( >+ umc.tools.umcpCommand( >+ 'updater/installer/running',{},false).then( > dojo.hitch(this, function(data) { > this._query_success('updater/installer/running'); > this._process_job_status(data); >@@ -314,36 +284,20 @@ > msg = msg + dojo.replace(this._("It took {elapsed} to complete.<br/>"),this._last_job); > } > msg = msg + this._("You may return to the overview by clicking the 'back' button now."); >- msg = msg + "<br/> <br/>"; >+ msg = msg + "<br/> <br/>"; > >- msg += this._statusfile_data(this._last_job); >- >- // -------------- DEBUG ------------------ >-// for (var v in this._last_job) >-// { >-// msg += ("<br/> " + v + " = '" + this._last_job[v] + "'"); >-// } >- // --------------------------------------- >- > this._head.set('content',msg); > >- this._log.stopWatching(); // now log is freely scrollable manually >- >- //alert("Watching is finished, job is '" + this._job_key + "'"); >- >- if ((this._last_job) && (this._last_job['reboot'])) >+ // set headers according to the outcome >+ var status = 'success'; >+ var lstat = this._last_job['_status_']; >+ if ((lstat == undefined) || (lstat != 'DONE')) > { >- var reb = this._last_job['reboot']; >- if (typeof(reb) == 'string') >- { >- reb = (reb == 'true'); >- } >- if ((! this._reboot_required) || (reb != this._reboot_required)) >- { >- //alert("setting REBOOT from _allow_close()"); >- this._reboot_required = reb; >- } >+ status = 'failed'; > } >+ this._switch_headings(status); >+ this._log.scrollToBottom(); // jump to bottom a very last time >+ this._log.stopWatching(); // now log is freely scrollable manually > > this._last_job = null; // can be deleted, but this._job_key should be retained! > } >@@ -393,6 +347,52 @@ > > this.inherited(arguments); > this._interval = 0; >+ }, >+ >+ // on switch to this page: set initial headings, and fetch >+ // the 'job running' status at least once. >+ onShow: function() { >+ this._switch_headings('running'); >+ this._query_job_status(); >+ }, >+ >+ // internal function that switches any heading variables of >+ // our current page, according to the retrieved job status >+ _switch_headings: function(status) { >+ >+ // avoid doing that repeatedly >+ if (status == this._last_heading_status) >+ { >+ return; >+ } >+ >+ this._last_heading_status = status; >+ >+ var headings = { >+ 'running': { >+ title: this._("Update in progress"), >+ headerText: this._("Univention Updater is working"), >+ helpText: this._("As long as the Univention Updater is updating your system, you're not allowed to manage settings or components. You may watch the progress, or close the module.") >+ }, >+ 'success': { >+ title: this._("Update finished"), >+ headerText: this._("Univention Updater job completed"), >+ helpText: this._("Univention Updater has successfully finished the current job. You may read through the log file. If you're finished you may press the 'back to overview' button to close this view.") >+ }, >+ 'failed': { >+ title: this._("Update failed"), >+ headerText: this._("Univention Updater job failed"), >+ helpText: this._("Univention Updater could not successfully complete the current job. The log file should show the cause of the failure. If you're finished examining the log file you may press the 'back to overview' button to close this view.") >+ } >+ }; >+ >+ var info = headings[status]; >+ for (var v in info) >+ { >+ this.set(v,info[v]); >+ } >+ // this.layout(); >+ > } > > }); >Index: umc/js/_updater/ComponentsPage.js >=================================================================== >--- umc/js/_updater/ComponentsPage.js (revision 5327) >+++ umc/js/_updater/ComponentsPage.js (working copy) >@@ -229,13 +229,13 @@ > moduleStore: umc.store.getModuleStore('name','updater/components'), > actions: actions, > columns: columns, >- polling: { >- interval: 5000, >- query: 'updater/components/serial', >- callback: dojo.hitch(this, function() { >- this.refresh(true); >- }) >- } >+// polling: { >+// interval: 5000, >+// query: 'updater/components/serial', >+// callback: dojo.hitch(this, function() { >+// this.refresh(true); >+// }) >+// } > }); > > this.addChild(this._grid); >@@ -313,6 +313,12 @@ > // removes a component > _delete_components: function(ids) { > >+ // multiAction callback is fired even if nothing >+ // is selected? >+ if (! ids.length) >+ { >+ return; >+ } > var msg = dojo.replace(this._("Are you sure you want to delete the following components: [{ids}]"),{ids: ids}); > umc.dialog.confirm(msg, > [ >@@ -341,6 +347,12 @@ > ]); > }, > >+ onShow: function() { >+ >+ this.inherited(arguments); >+ this.refresh(); >+ }, >+ > // gives a means to restart polling after reauthentication > startPolling: function() { > this._grid.startPolling(); >Index: umc/js/_updater/DetailsPage.js >=================================================================== >--- umc/js/_updater/DetailsPage.js (revision 5327) >+++ umc/js/_updater/DetailsPage.js (working copy) >@@ -69,8 +69,7 @@ > 'default': true, > label: this._("Apply changes"), > onClick: dojo.hitch(this, function() { >- this.standby(true); >- this._form.save(this._save_options); >+ this._form.onSubmit(); > }) > } > ] >@@ -131,7 +130,7 @@ > type: 'TextBox', > name: 'version', > label: this._("Version"), >- regExp: '^((([0-9]+\.[0-9]+|current),)*([0-9]+\.[0-9]+|current))?$' >+ regExp: '^((([0-9]+\\.[0-9]+|current),)*([0-9]+\\.[0-9]+|current))?$' > } > ]; > >@@ -161,7 +160,13 @@ > widgets: widgets, > layout: layout, > //buttons: buttons, >- moduleStore: umc.store.getModuleStore('name','updater/components') >+ moduleStore: umc.store.getModuleStore('name','updater/components'), >+ // This is (a) the submit handler of the form, but >+ // also (b) the onClick handler of the 'Apply' button >+ onSubmit: dojo.hitch(this,function() { >+ this._form.standby(true); >+ this._form.save(this._save_options); >+ }) > }); > this.addChild(this._form); > >@@ -197,6 +202,7 @@ > this.set('helpText',this._("Please enter the details for the new component.")); > > this._form.setFormValues(data); >+ this._form.standby(false); > > // Component name editable and focused? > var nam = this._form.getWidget('name'); >@@ -219,7 +225,7 @@ > this.set('headerText',dojo.replace(this._("Edit component details [{component}]"),{component:data})); > this.set('helpText',this._("You're editing the details of the component definition.")); > >- this._form.load(data); >+ this._form.load(data).then(dojo.hitch(this,function() { this._form.standby(false); })); > > // If we're in EDIT mode: don't allow changes to the component name. > this._form.getWidget('name').setDisabled(true); >@@ -233,7 +239,6 @@ > > // return to grid view > closeDetail: function() { >- } >- >+ } > > }); >Index: umc/js/_updater/UpdatesPage.js >=================================================================== >--- umc/js/_updater/UpdatesPage.js (revision 5327) >+++ umc/js/_updater/UpdatesPage.js (working copy) >@@ -117,6 +117,7 @@ > // FIXME Manual placement: should be done by the layout framework some day. > style: 'width:300px;', > onValuesLoaded: dojo.hitch(this, function(values) { >+ // TODO check updater/installer/running, don't do anything if something IS running > try > { > this._query_success('updater/updates/query'); >@@ -250,6 +251,7 @@ > callback: dojo.hitch(this,function() { > var element = this._form.getWidget('releases'); > var release = element.get('value'); >+ // TODO check updater/installer/running, don't do action if a job is running > this.runReleaseUpdate(release); > }), > visible: false >@@ -258,6 +260,7 @@ > name: 'run_errata_update', > label: this._('Install errata update'), > callback: dojo.hitch(this, function() { >+ // TODO check updater/installer/running, don't do action if a job is running > this.runErrataUpdate(); > }), > visible: false >@@ -269,7 +272,7 @@ > this._check_dist_upgrade(); > }) > }, >- // to test the refresh code >+ // If refresh isn't automatic anymore... should we show a "Refresh" button? > // { > // name: 'refresh', > // label: this._("Refresh"), >@@ -288,6 +291,7 @@ > name: 'easy_upgrade', > label: this._("Start Upgrade"), // FIXME Label not correct > callback: dojo.hitch(this, function() { >+ // TODO check updater/installer/running, don't do action if a job is running > this.runEasyUpgrade(); > }) > } >@@ -343,14 +347,14 @@ > widgets: widgets, > layout: layout, > buttons: buttons, >- moduleStore: umc.store.getModuleStore(null,'updater/updates'), >- polling: { >- interval: 5000, >- query: 'updater/updates/serial', >- callback: dojo.hitch(this, function() { >- this.refreshPage(); >- }) >- } >+ moduleStore: umc.store.getModuleStore(null,'updater/updates') >+// polling: { >+// interval: 5000, >+// query: 'updater/updates/serial', >+// callback: dojo.hitch(this, function() { >+// this.refreshPage(); >+// }) >+// } > }); > > // Before we attach the form to our page, just switch off all title panes. >@@ -461,7 +465,7 @@ > } > catch(error) > { >- console.error("set_upates_button: " + error.message); >+ console.error("set_updates_button: " + error.message); > } > }, > >@@ -541,7 +545,6 @@ > // pop a message up whenever the 'on' value changes > if (on != this._last_reboot) > { >- //alert("Reboot affordance changed to " + on); > this._last_reboot = on; > } > >@@ -564,17 +567,33 @@ > }, > > // called when the 'reboot' button is pressed. >+ // now with confirmation that doesn't depend on the 'confirmations' setting. > _reboot: function() { > >- this.standby(true); >- umc.tools.umcpCommand('updater/installer/reboot').then(dojo.hitch(this, function() { >- this.standby(false); >- this._show_reboot_pane(true,true); >- }), >- dojo.hitch(this, function() { >- this.standby(false); >- }) >+ umc.dialog.confirm( >+ this._("Do you really want to reboot the machine?"), >+ [ >+ { >+ label: this._("Cancel"), >+ 'default': true >+ }, >+ { >+ label: this._("Reboot"), >+ callback: dojo.hitch(this, function() { >+ this.standby(true); >+ umc.tools.umcpCommand('updater/installer/reboot').then(dojo.hitch(this, function() { >+ this.standby(false); >+ this._show_reboot_pane(true,true); >+ }), >+ dojo.hitch(this, function() { >+ this.standby(false); >+ }) >+ ); >+ }) >+ } >+ ] > ); >+ > }, > > // First page refresh doesn't work properly when invoked in 'buildRendering()' so >@@ -587,6 +606,13 @@ > > }, > >+ // ensures refresh whenever we're returning from any action. >+ onShow: function() { >+ >+ this.inherited(arguments); >+ this.refreshPage(true); >+ }, >+ > // should refresh any data contained here. (can be called from outside when needed) > // with 'force=true' the caller can request that even the affordance to 'check > // update availability' is reset to 'not yet checked'. >@@ -601,7 +627,8 @@ > > // gives a means to restart polling after reauthentication > startPolling: function() { >- this._form.startPolling(); >+ // not needed anymore. >+ // this._form.startPolling(); > }, > > // These functions are stubs that the 'updater' Module is listening to, >Index: umc/js/_updater/_LogViewer.js >=================================================================== >--- umc/js/_updater/_LogViewer.js (revision 5327) >+++ umc/js/_updater/_LogViewer.js (working copy) >@@ -148,11 +148,21 @@ > try > { > var oldpos = this._get_positions(); >- this._text.set('content',content); >+ >+ // check if we should scroll to bottom. We avoid that if the current position >+ // is not at the end, indicating that the user has moved the pane manually. >+ // > // our height measure doesn't strictly reflect what we need, so we add a little tolerance: > // regard the positon 'at bottom' if its plus/minus 20px around zero >- if ( (this._first_call > 0) || ((oldpos['d_bottom'] > -20) && (oldpos['d_bottom'] < 20))) >+ var to_scroll = false; >+ if ( (this._first_call > 0) || ( /* (oldpos['d_bottom'] > -20) && */ (oldpos['d_bottom'] < 20))) > { >+ to_scroll = true; >+ } >+ >+ this._text.set('content',content); >+ if (to_scroll) >+ { > this.scrollToBottom(); > if (this._first_call > 0) > { >@@ -184,6 +194,14 @@ > // - in the 'content' setter if the position is roughly at the bottom > // > scrollToBottom: function() { >+ >+ // we ignore any calls to 'scrollToBottom()' if we're not currently >+ // watching. This makes the pane free movable at the 'return to overview' >+ // prompt when a job is finished. >+ if (this._check_interval == 0) >+ { >+ return; >+ } > var newpos = this._get_positions(); > var todo = true; > var node = this._text.contentNode.parentNode; >@@ -228,7 +246,6 @@ > // A seperate function that is called by the 'ProgressPage' when the key of the > // current job has become known. > setJobKey: function(job) { >- //alert("LogViewer::setJobKey('" + job + "')"); > this._current_job = job; > }, > >Index: umc/js/_updater/Form.js >=================================================================== >--- umc/js/_updater/Form.js (revision 5327) >+++ umc/js/_updater/Form.js (working copy) >@@ -31,6 +31,7 @@ > dojo.provide("umc.modules._updater.Form"); > > dojo.require("umc.widgets.Form"); >+dojo.require("umc.widgets.StandbyMixin"); > dojo.require("umc.modules._updater._PollingMixin"); > > // Form with some useful additions: >@@ -45,6 +46,7 @@ > // > dojo.declare("umc.modules._updater.Form", [ > umc.widgets.Form, >+ umc.widgets.StandbyMixin, > umc.modules._updater._PollingMixin > ], > { >Index: umc/js/de.po >=================================================================== >--- umc/js/de.po (revision 5327) >+++ umc/js/de.po (working copy) >@@ -3,7 +3,7 @@ > msgstr "" > "Project-Id-Version: univention-management-console-module-updater\n" > "Report-Msgid-Bugs-To: packages@univention.de\n" >-"POT-Creation-Date: 2011-11-16 04:14+0100\n" >+"POT-Creation-Date: 2011-11-28 11:09+0100\n" > "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" > "Last-Translator: Frank Greif <fg@it25.de>\n" > "Language-Team: LANGUAGE <LL@li.org>\n" >@@ -12,16 +12,16 @@ > "Content-Type: text/plain; charset=UTF-8\n" > "Content-Transfer-Encoding: 8bit\n" > >-#: umc/js/_updater/UpdatesPage.js:195 umc/js/_updater/UpdatesPage.js:216 >+#: umc/js/_updater/UpdatesPage.js:196 umc/js/_updater/UpdatesPage.js:217 > msgid "... loading data ..." > msgstr "... Daten werden geladen ..." > >-#: umc/js/_updater/ProgressPage.js:374 >+#: umc/js/_updater/ProgressPage.js:328 > msgid "... loading job data ..." > msgstr "... Daten werden geladen ..." > >-#: umc/js/_updater/_LogViewer.js:88 umc/js/_updater/_LogViewer.js:219 >-#: umc/js/_updater/_LogViewer.js:245 >+#: umc/js/_updater/_LogViewer.js:88 umc/js/_updater/_LogViewer.js:237 >+#: umc/js/_updater/_LogViewer.js:262 > msgid "... loading log file ..." > msgstr "... Protokolldatei wird geladen ..." > >@@ -33,7 +33,7 @@ > msgid "Add" > msgstr "Neu" > >-#: umc/js/_updater/DetailsPage.js:196 >+#: umc/js/_updater/DetailsPage.js:201 > msgid "Add a new component" > msgstr "Neue Komponente hinzufügen" > >@@ -45,7 +45,7 @@ > msgid "Additional components" > msgstr "Zusätzliche Komponenten" > >-#: umc/js/_updater/DetailsPage.js:150 >+#: umc/js/_updater/DetailsPage.js:149 > msgid "Advanced settings" > msgstr "Weitere Einstellungen" > >@@ -61,11 +61,11 @@ > msgid "Apply changes" > msgstr "Ãnderungen anwenden" > >-#: umc/js/_updater/ComponentsPage.js:316 >+#: umc/js/_updater/ComponentsPage.js:322 > msgid "Are you sure you want to delete the following components: [{ids}]" > msgstr "Möchten Sie die folgenden Komponenten wirklich löschen: [{ids}]" > >-#: umc/js/_updater/ProgressPage.js:67 >+#: umc/js/_updater/ProgressPage.js:375 > msgid "" > "As long as the Univention Updater is updating your system, you're not " > "allowed to manage settings or components. You may watch the progress, or " >@@ -87,20 +87,20 @@ > msgid "Available system updates" > msgstr "Verfügbare System-Updates" > >-#: umc/js/_updater/DetailsPage.js:141 >+#: umc/js/_updater/DetailsPage.js:140 > msgid "Basic settings" > msgstr "Allgemeine Einstellungen" > > #: umc/js/updater.js:303 umc/js/updater.js:380 >-#: umc/js/_updater/ComponentsPage.js:322 >+#: umc/js/_updater/UpdatesPage.js:577 umc/js/_updater/ComponentsPage.js:328 > msgid "Cancel" > msgstr "Abbrechen" > >-#: umc/js/_updater/UpdatesPage.js:267 umc/js/_updater/UpdatesPage.js:459 >+#: umc/js/_updater/UpdatesPage.js:270 umc/js/_updater/UpdatesPage.js:463 > msgid "Check for package updates" > msgstr "Paket-Aktualisierungen prüfen" > >-#: umc/js/_updater/DetailsPage.js:93 umc/js/_updater/ComponentsPage.js:183 >+#: umc/js/_updater/DetailsPage.js:92 umc/js/_updater/ComponentsPage.js:183 > msgid "Component Name" > msgstr "Name der Komponente" > >@@ -118,10 +118,6 @@ > "Die Verbindung zum Server wurde unterbrochen. Ein erneuter Verbindungsaufbau " > "wird gestartet." > >-#: umc/js/_updater/ProgressPage.js:256 >-msgid "Current status file content" >-msgstr "Inhalt der Statusdatei" >- > #: umc/js/_updater/ComponentsPage.js:167 > msgid "Delete" > msgstr "Löschen" >@@ -130,11 +126,11 @@ > msgid "Delete the selected component definition" > msgstr "Diese Komponente löschen" > >-#: umc/js/_updater/ComponentsPage.js:325 >+#: umc/js/_updater/ComponentsPage.js:331 > msgid "Delete!" > msgstr "Löschen!" > >-#: umc/js/_updater/DetailsPage.js:98 >+#: umc/js/_updater/DetailsPage.js:97 > msgid "Description" > msgstr "Beschreibung" > >@@ -146,18 +142,18 @@ > msgid "Disabled" > msgstr "Deaktiviert" > >-#: umc/js/updater.js:212 >+#: umc/js/updater.js:213 > msgid "Do you really want to install all available errata updates?" > msgstr "" > "Möchten Sie wirklich alle verfügbaren Errata-Aktualisierungen installieren?" > >-#: umc/js/updater.js:204 >+#: umc/js/updater.js:205 > msgid "Do you really want to install release updates up to version {release}?" > msgstr "" > "Möchten Sie wirklich alle Release-Aktualisierungen bis zur Version " > "'{release}' installieren?" > >-#: umc/js/updater.js:195 >+#: umc/js/updater.js:196 > msgid "Do you really want to install the '{name}' component?" > msgstr "Möchten Sie wirklich die Komponente '{name}' installieren?" > >@@ -169,7 +165,11 @@ > "Möchten Sie wirklich die genannten Pakete aktualisieren, installieren bzw. " > "entfernen?" > >-#: umc/js/updater.js:225 >+#: umc/js/_updater/UpdatesPage.js:574 >+msgid "Do you really want to reboot the machine?" >+msgstr "Möchten Sie die Maschine jetzt neu starten?" >+ >+#: umc/js/updater.js:226 > msgid "Do you really want to upgrade your system?" > msgstr "Möchten Sie Ihr System jetzt aktualisieren?" > >@@ -193,7 +193,7 @@ > msgid "Edit" > msgstr "Bearbeiten" > >-#: umc/js/_updater/DetailsPage.js:219 >+#: umc/js/_updater/DetailsPage.js:225 > msgid "Edit component details [{component}]" > msgstr "Komponenten-Details [{component}] bearbeiten" > >@@ -205,7 +205,7 @@ > msgid "Enable" > msgstr "Aktivieren" > >-#: umc/js/_updater/DetailsPage.js:88 >+#: umc/js/_updater/DetailsPage.js:87 > msgid "Enable this component" > msgstr "Diese Komponente aktivieren" > >@@ -213,7 +213,7 @@ > msgid "Enable/disable this component" > msgstr "Diese Komponente aktivieren" > >-#: umc/js/_updater/UpdatesPage.js:325 >+#: umc/js/_updater/UpdatesPage.js:329 > msgid "Errata updates" > msgstr "Errata-Aktualisierungen" > >@@ -233,19 +233,19 @@ > "Um die kürzlich ausgeführte Installer-Aktion fertigzustellen, ist es " > "erforderlich, die Maschine neu zu starten." > >-#: umc/js/_updater/ComponentsPage.js:128 >+#: umc/js/updater.js:307 umc/js/_updater/ComponentsPage.js:128 > msgid "Install" > msgstr "Installieren" > >-#: umc/js/_updater/UpdatesPage.js:259 >+#: umc/js/_updater/UpdatesPage.js:261 > msgid "Install errata update" > msgstr "Errata-Aktualisierungen installieren" > >-#: umc/js/_updater/UpdatesPage.js:458 >+#: umc/js/_updater/UpdatesPage.js:462 > msgid "Install package updates" > msgstr "Paket-Aktualisierungen installieren" > >-#: umc/js/_updater/UpdatesPage.js:249 >+#: umc/js/_updater/UpdatesPage.js:250 > msgid "Install release update" > msgstr "Release-Aktualisierungen installieren" > >@@ -273,20 +273,24 @@ > "Tests in einer Testumgebung und die Erstellung einer Sicherung des Systems " > "werden ebenfalls empfohlen." > >-#: umc/js/_updater/ProgressPage.js:314 >+#: umc/js/_updater/ProgressPage.js:284 > msgid "It took {elapsed} to complete.<br/>" > msgstr "Er hat {elapsed} benötigt.<br/>" > >+#: umc/js/_updater/ProgressPage.js:76 >+msgid "Log file view" >+msgstr "Protokoll" >+ > #: umc/js/updater.js:361 > msgid "Logfiles can be found in the directory /var/log/univention/." > msgstr "Logdateien können im Verzeichnis /var/log/univention/ gefunden werden." > >-#: umc/js/_updater/UpdatesPage.js:413 >+#: umc/js/_updater/UpdatesPage.js:417 > msgid "No errata updates for the current version are installed." > msgstr "" > "Für die aktuelle Version sind keine Errata-Aktualisierungen installiert." > >-#: umc/js/_updater/UpdatesPage.js:435 >+#: umc/js/_updater/UpdatesPage.js:439 > msgid "None of them are currently enabled." > msgstr "Davon sind momentan keine aktiviert." > >@@ -295,8 +299,8 @@ > "Nonetheless, the update proceeds and the update can be monitored from a new " > "UMC session. " > msgstr "" >-"Das Update wird trotzdem weiter durchgeführt, der Vorgang kann in einer neuen " >-"UMC-Sitzung weiter beobachtet werden. " >+"Das Update wird trotzdem weiter durchgeführt, der Vorgang kann in einer " >+"neuen UMC-Sitzung weiter beobachtet werden. " > > #: umc/js/_updater/ComponentsPage.js:216 > msgid "Not found" >@@ -307,10 +311,10 @@ > "On this page, you find all additional components defined for this system. " > "You can enable/disable/edit/delete them, and you can add new ones here." > msgstr "" >-"Auf dieser Seite sehen Sie alle Komponenten, die für " >-"dieses System definiert sind, Die Komponenten können aktiviert oder " >-"deaktiviert werden, Details einer Komponente können geändert, Komponenten " >-"gelöscht oder unter bestimmten Umständen installiert werden." >+"Auf dieser Seite sehen Sie alle Komponenten, die für dieses System definiert " >+"sind, Die Komponenten können aktiviert oder deaktiviert werden, Details " >+"einer Komponente können geändert, Komponenten gelöscht oder unter bestimmten " >+"Umständen installiert werden." > > #: umc/js/_updater/ComponentsPage.js:90 > msgid "On/Off" >@@ -321,15 +325,19 @@ > msgstr "" > "Ãberblick über Software-Aktualisierungen, die das Gesamtsystem betreffen" > >-#: umc/js/_updater/UpdatesPage.js:145 umc/js/_updater/UpdatesPage.js:237 >+#: umc/js/_updater/UpdatesPage.js:146 umc/js/_updater/UpdatesPage.js:238 > msgid "Package update status not yet checked" > msgstr "Der Paket-Aktualisierungsstatus wurde noch nicht geprüft." > >-#: umc/js/_updater/UpdatesPage.js:333 >+#: umc/js/_updater/UpdatesPage.js:337 > msgid "Package updates" > msgstr "Paketaktualisierungen" > >-#: umc/js/_updater/DetailsPage.js:128 >+#: umc/js/_updater/UpdatesPage.js:490 >+msgid "Package updates are available." >+msgstr "Es sind Paket-Aktualisierungen verfügbar." >+ >+#: umc/js/_updater/DetailsPage.js:127 > msgid "Password" > msgstr "Passwort" > >@@ -346,23 +354,19 @@ > "jeweiligen Update in dem <a href='http://forum.univention.de'>Univention " > "Forum</a>." > >-#: umc/js/_updater/DetailsPage.js:197 >+#: umc/js/_updater/DetailsPage.js:202 > msgid "Please enter the details for the new component." > msgstr "Bitte geben Sie die Details für die neue Komponente ein." > >-#: umc/js/_updater/ProgressPage.js:76 >-msgid "Progress information" >-msgstr "Aktueller Vorgang" >- >-#: umc/js/_updater/UpdatesPage.js:282 >+#: umc/js/_updater/UpdatesPage.js:285 umc/js/_updater/UpdatesPage.js:581 > msgid "Reboot" > msgstr "Neu starten" > >-#: umc/js/_updater/UpdatesPage.js:299 >+#: umc/js/_updater/UpdatesPage.js:303 > msgid "Reboot required" > msgstr "Neustart erforderlich" > >-#: umc/js/_updater/UpdatesPage.js:275 umc/js/_updater/ComponentsPage.js:75 >+#: umc/js/_updater/UpdatesPage.js:278 umc/js/_updater/ComponentsPage.js:75 > msgid "Refresh" > msgstr "Aktualisieren" > >@@ -370,30 +374,22 @@ > msgid "Refresh display to see current values" > msgstr "Anzeige aktualisieren" > >-#: umc/js/_updater/UpdatesPage.js:307 >+#: umc/js/_updater/UpdatesPage.js:311 > msgid "Release information" > msgstr "Aktueller Status" > >-#: umc/js/_updater/UpdatesPage.js:315 >+#: umc/js/_updater/UpdatesPage.js:319 > msgid "Release updates" > msgstr "Release-Aktualisierungen" > >-#: umc/js/_updater/DetailsPage.js:108 >+#: umc/js/_updater/SettingsPage.js:86 umc/js/_updater/DetailsPage.js:107 > msgid "Repository prefix" >-msgstr "Repository-Prefix" >+msgstr "Repository prefix" > >-#: umc/js/_updater/DetailsPage.js:103 >+#: umc/js/_updater/SettingsPage.js:81 umc/js/_updater/DetailsPage.js:102 > msgid "Repository server" >-msgstr "Repository-Server" >+msgstr "Repository server" > >-#: umc/js/_updater/SettingsPage.js:86 >-msgid "Repository prefix" >-msgstr "Repository-Prefix" >- >-#: umc/js/_updater/SettingsPage.js:81 >-msgid "Repository server" >-msgstr "Repository-Server" >- > #: umc/js/_updater/SettingsPage.js:54 > msgid "Reset" > msgstr "Zurücksetzen" >@@ -406,11 +402,7 @@ > msgid "Settings for online updates" > msgstr "Einstellungen für Online-Aktualisierung" > >-#: umc/js/_updater/UpdatesPage.js:486 >-msgid "Package updates are available." >-msgstr "Es sind Paket-Aktualisierungen verfügbar." >- >-#: umc/js/_updater/UpdatesPage.js:289 >+#: umc/js/_updater/UpdatesPage.js:292 > msgid "Start Upgrade" > msgstr "Aktualisierung starten" > >@@ -418,7 +410,7 @@ > msgid "Start Upgrade?" > msgstr "Aktualisierung starten?" > >-#: umc/js/updater.js:307 umc/js/updater.js:383 >+#: umc/js/updater.js:383 > msgid "Start!" > msgstr "Start!" > >@@ -426,75 +418,78 @@ > msgid "Status" > msgstr "Status" > >+#: umc/js/updater.js:408 >+msgid "" >+"The Univention Updater action could not be started [Error {status}]: " >+"{message}" >+msgstr "" >+"Der Univention Updater konnte nicht gestartet werden [Fehler {status}]: " >+"{message}" >+ >+#: umc/js/_updater/UpdatesPage.js:71 >+msgid "The computer is now rebooting. " >+msgstr "Der Computer wird jetzt neu gestartet. " >+ > #: umc/js/updater.js:555 > msgid "" > "The connection to the server was lost, trying to reconnect. You may need to " > "re-authenticate when the connection is restored." > msgstr "" >-"Die Verbindung zum Server ist unterbrochen. Es wird versucht, die " >-"Verbindung wieder aufzunehmen. Wahrscheinlich müssen Sie sich neu anmelden, " >-"wenn die Verbindung wieder hergestellt ist." >+"Die Verbindung zum Server ist unterbrochen. Es wird versucht, die Verbindung " >+"wieder aufzunehmen. Wahrscheinlich müssen Sie sich neu anmelden, wenn die " >+"Verbindung wieder hergestellt ist." > >-#: umc/js/_updater/ProgressPage.js:311 >+#: umc/js/_updater/ProgressPage.js:281 > msgid "The current job (<b>{label}</b>) is now finished.<br/>" > msgstr "Der aktuelle Vorgang (<b>{label}</b>) ist jetzt beendet.<br/>" > >-#: umc/js/_updater/UpdatesPage.js:388 >+#: umc/js/_updater/UpdatesPage.js:392 > msgid "The currently installed release version is {ucs_version}" > msgstr "Die momentan installierte Version ist {ucs_version}" > >-#: umc/js/_updater/UpdatesPage.js:395 >+#: umc/js/_updater/UpdatesPage.js:399 > msgid "" > "The currently installed release version is {ucs_version} errata{erratalevel}" > msgstr "" > "Die momentan installierte Version ist {ucs_version} errata{erratalevel}" > >-#: umc/js/updater.js:408 >-msgid "The Univention Updater action could not be started [Error {status}]: {message}" >-msgstr "" >-"Der Univention Updater konnte nicht gestartet werden [Fehler {status}]: " >-"{message}" >- >-#: umc/js/_updater/ProgressPage.js:183 >+#: umc/js/_updater/ProgressPage.js:193 > msgid "The job <b>{label}</b> (started {elapsed} ago) is currently running." > msgstr "" > "Momentan läuft der Aktualisierungsauftrag <b>{label}</b> (gestartet vor " > "{elapsed})" > >-#: umc/js/_updater/UpdatesPage.js:71 >-msgid "The computer is now rebooting. " >-msgstr "Der Computer wird jetzt neu gestartet. " >- >-#: umc/js/_updater/UpdatesPage.js:416 >+#: umc/js/_updater/UpdatesPage.js:420 > msgid "The most recent errata update is {latest_errata_update}." > msgstr "" > "Die neueste verfügbare Errata-Aktualisierung ist {latest_errata_update}." > >-#: umc/js/_updater/UpdatesPage.js:433 >+#: umc/js/_updater/UpdatesPage.js:437 > msgid "The system knows about {components} components." > msgstr "Dem System sind {components} Komponenten bekannt." > >-#: umc/js/_updater/UpdatesPage.js:429 >+#: umc/js/_updater/UpdatesPage.js:433 > msgid "There are no components configured for this system." > msgstr "Momentan sind keine Komponenten konfiguriert." > >-#: umc/js/_updater/UpdatesPage.js:417 >+#: umc/js/_updater/UpdatesPage.js:421 > msgid "There are no errata updates available for the current release." >-msgstr "Es sind keine Errata-Aktualisierungen für das aktuelle Release verfügbar." >+msgstr "" >+"Es sind keine Errata-Aktualisierungen für das aktuelle Release verfügbar." > >-#: umc/js/_updater/UpdatesPage.js:487 >+#: umc/js/_updater/UpdatesPage.js:491 > msgid "There are no package updates available." > msgstr "Es sind keine Paket-Aktualisierungen verfügbar." > >-#: umc/js/_updater/UpdatesPage.js:201 >+#: umc/js/_updater/UpdatesPage.js:202 > msgid "There are no release updates available." > msgstr "Es sind keine Release-Aktualisierungen verfügbar." > >-#: umc/js/_updater/UpdatesPage.js:404 >+#: umc/js/_updater/UpdatesPage.js:408 > msgid "There are no updates available." > msgstr "Es sind keine Aktualisierungen verfügbar." > >-#: umc/js/_updater/UpdatesPage.js:403 >+#: umc/js/_updater/UpdatesPage.js:407 > msgid "There are updates available." > msgstr "Es sind Aktualisierungen verfügbar." > >@@ -514,19 +509,53 @@ > msgid "Thus, updates shouldn't be installed on a live system. " > msgstr "Deshalb sollten Sie das Update nicht im laufenden Betrieb einspielen. " > >-#: umc/js/_updater/ProgressPage.js:66 >+#: umc/js/_updater/ProgressPage.js:385 >+msgid "" >+"Univention Updater could not successfully complete the current job. The log " >+"file should show the cause of the failure. If you're finished examining the " >+"log file you may press the 'back to overview' button to close this view." >+msgstr "" >+"Univention Updater konnte den aktuellen Auftrag nicht erfolgreich " >+"abschlieÃen. Im Protokoll sollten Sie die Ursache des Fehlschlages sehen " >+"können. Der Knopf 'zurück zur Ãbersicht' schlieÃt die aktuelle Ansicht." >+ >+#: umc/js/_updater/ProgressPage.js:380 >+msgid "" >+"Univention Updater has successfully finished the current job. You may read " >+"through the log file. If you're finished you may press the 'back to " >+"overview' button to close this view." >+msgstr "" >+"Univention Updater hat den aktuellen Auftrag erfolgreich abgeschlossen. " >+ >+#: umc/js/_updater/ProgressPage.js:374 > msgid "Univention Updater is working" > msgstr "Univention Updater ist gerade aktiv" > >+#: umc/js/_updater/ProgressPage.js:379 >+msgid "Univention Updater job completed" >+msgstr "Univention Updater Auftrag abgeschlossen" >+ >+#: umc/js/_updater/ProgressPage.js:384 >+msgid "Univention Updater job failed" >+msgstr "Univention Updater Auftrag ist fehlgeschlagen" >+ > #: umc/js/_updater/ComponentsPage.js:218 > msgid "Unknown" > msgstr "Unbekannt" > >-#: umc/js/_updater/UpdatesPage.js:491 >+#: umc/js/_updater/UpdatesPage.js:495 > msgid "Update availability could not be checked." > msgstr "Verfügbarkeit von Aktualisierungen konnte nicht geprüft werden." > >-#: umc/js/_updater/ProgressPage.js:65 >+#: umc/js/_updater/ProgressPage.js:383 >+msgid "Update failed" >+msgstr "Aktualisierung fehlgeschlagen" >+ >+#: umc/js/_updater/ProgressPage.js:378 >+msgid "Update finished" >+msgstr "Aktualisierung abgeschlossen" >+ >+#: umc/js/_updater/ProgressPage.js:373 > msgid "Update in progress" > msgstr "Aktualisierung läuft" > >@@ -542,19 +571,19 @@ > msgid "Updates" > msgstr "Aktualisierungen" > >-#: umc/js/_updater/SettingsPage.js:91 umc/js/_updater/DetailsPage.js:113 >+#: umc/js/_updater/SettingsPage.js:91 umc/js/_updater/DetailsPage.js:112 > msgid "Use maintained repositories" > msgstr "'Maintained' Repositories benutzen" > >-#: umc/js/_updater/SettingsPage.js:96 umc/js/_updater/DetailsPage.js:118 >+#: umc/js/_updater/SettingsPage.js:96 umc/js/_updater/DetailsPage.js:117 > msgid "Use unmaintained repositories" > msgstr "'Unmaintained' Repositories benutzen" > >-#: umc/js/_updater/DetailsPage.js:123 >+#: umc/js/_updater/DetailsPage.js:122 > msgid "Username" > msgstr "Benutzername" > >-#: umc/js/_updater/DetailsPage.js:133 >+#: umc/js/_updater/DetailsPage.js:132 > msgid "Version" > msgstr "Version" > >@@ -566,17 +595,17 @@ > "Wenn die Verbindung wieder hergestellt ist, werden Sie aufgefordert, sich " > "noch einmal neu anzumelden." > >-#: umc/js/_updater/ProgressPage.js:316 >+#: umc/js/_updater/ProgressPage.js:286 > msgid "You may return to the overview by clicking the 'back' button now." > msgstr "" > "Sie können jetzt zur Ãbersicht zurückkehren, indem Sie den 'Zurück'-Knopf " > "drücken." > >-#: umc/js/_updater/ProgressPage.js:187 >+#: umc/js/_updater/ProgressPage.js:197 > msgid "You're currently watching its log file <b>{logfile}</b>" > msgstr "Sie sehen die Protokolldatei <b>{logfile}</b>" > >-#: umc/js/_updater/DetailsPage.js:220 >+#: umc/js/_updater/DetailsPage.js:226 > msgid "You're editing the details of the component definition." > msgstr "Sie bearbeiten die Details der Komponenten-Definition." > >@@ -588,11 +617,15 @@ > "Ihre aktuelle Sitzung ist abgelaufen, oder die Verbindung zum Server war " > "verlorengegangen. Sie müssen sich noch einmal neu anmelden." > >-#: umc/js/_updater/UpdatesPage.js:412 >+#: umc/js/_updater/UpdatesPage.js:416 > msgid "Your system is at errata level {erratalevel}." > msgstr "Ihr System ist auf dem Errata-Level {erratalevel}." > >-#: umc/js/_updater/DetailsPage.js:55 umc/js/_updater/ProgressPage.js:102 >+#: umc/js/_updater/ProgressPage.js:102 >+msgid "back" >+msgstr "Zurück" >+ >+#: umc/js/_updater/DetailsPage.js:55 > msgid "back to overview" > msgstr "zurück zur Ãbersicht" > >@@ -608,9 +641,6 @@ > msgid "{count} packages to be updated" > msgstr "{count} Pakete werden aktualisiert" > >-#: umc/js/_updater/UpdatesPage.js:436 >+#: umc/js/_updater/UpdatesPage.js:440 > msgid "{enabled} of them are currently enabled." > msgstr "Davon sind {enabled} Komponenten aktiviert." >- >-#~ msgid "Use hotfix repositories" >-#~ msgstr "'Hotfix' Repositories benutzen"
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
|
Diff
Attachments on
bug 22898
:
3608
|
3609
|
3830
| 3906 |
3999