Binary files /tmp/tmpEpiSJs/3PiFqBBgEG/grass-7.8.0~rc1/ChangeLog_7.8.0.gz and /tmp/tmpEpiSJs/6kdOkt7OZa/grass-7.8.0/ChangeLog_7.8.0.gz differ Binary files /tmp/tmpEpiSJs/3PiFqBBgEG/grass-7.8.0~rc1/ChangeLog_7_8_0RC1.gz and /tmp/tmpEpiSJs/6kdOkt7OZa/grass-7.8.0/ChangeLog_7_8_0RC1.gz differ diff -Nru grass-7.8.0~rc1/debian/changelog grass-7.8.0/debian/changelog --- grass-7.8.0~rc1/debian/changelog 2019-08-30 12:08:34.000000000 +0000 +++ grass-7.8.0/debian/changelog 2019-09-07 09:42:24.000000000 +0000 @@ -1,3 +1,19 @@ +grass (7.8.0-1~bionic1) bionic; urgency=medium + + * Rebuild for bionic. + + -- Martin Landa Sat, 07 Sep 2019 11:42:24 +0200 + +grass (7.8.0-1) unstable; urgency=medium + + * New upstream release. + * Recommend both git & subversion for g.extension. + * Drop unused override for spelling-error-in-binary. + * Don't define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H, proj.h is used. + * Move from experimental to unstable. + + -- Bas Couwenberg Sat, 07 Sep 2019 09:31:16 +0200 + grass (7.8.0~rc1-1~exp1~bionic1) bionic; urgency=medium * Rebuild for bionic. @@ -22,6 +38,14 @@ -- Bas Couwenberg Wed, 14 Aug 2019 19:47:24 +0200 +grass (7.6.1-4) unstable; urgency=medium + + * Update PIE hardening conditional, trusty is EOL. + * Drop unused override for spelling-error-in-binary. + * No change rebuild with PDAL 2.0.1. + + -- Bas Couwenberg Wed, 04 Sep 2019 19:16:06 +0200 + grass (7.6.1-3) unstable; urgency=medium * No change rebuild for PDAL mini transition. diff -Nru grass-7.8.0~rc1/debian/control grass-7.8.0/debian/control --- grass-7.8.0~rc1/debian/control 2019-08-30 12:07:34.000000000 +0000 +++ grass-7.8.0/debian/control 2019-09-07 09:41:28.000000000 +0000 @@ -55,7 +55,7 @@ Standards-Version: 4.4.0 Vcs-Browser: https://salsa.debian.org/debian-gis-team/grass Vcs-Git: https://salsa.debian.org/debian-gis-team/grass.git -b ubuntugis/bionic -Homepage: http://grass.osgeo.org/ +Homepage: https://grass.osgeo.org/ Package: grass Architecture: all @@ -186,7 +186,8 @@ ${shlibs:Depends}, ${misc:Depends} # git is needed by g.extension, a primary motivator for installing the grass-dev pkg -Recommends: git +Recommends: git, + subversion Suggests: grass-dev-doc, pkg-config Description: GRASS GIS development files diff -Nru grass-7.8.0~rc1/debian/gbp.conf grass-7.8.0/debian/gbp.conf --- grass-7.8.0~rc1/debian/gbp.conf 2019-08-30 12:08:27.000000000 +0000 +++ grass-7.8.0/debian/gbp.conf 2019-09-07 09:41:20.000000000 +0000 @@ -14,3 +14,6 @@ # Always use pristine-tar. pristine-tar = True + +[buildpackage] +pbuilder-options = --source-only-changes diff -Nru grass-7.8.0~rc1/debian/grass-core.lintian-overrides grass-7.8.0/debian/grass-core.lintian-overrides --- grass-7.8.0~rc1/debian/grass-core.lintian-overrides 2019-08-30 12:07:17.000000000 +0000 +++ grass-7.8.0/debian/grass-core.lintian-overrides 2019-09-07 09:41:00.000000000 +0000 @@ -48,9 +48,6 @@ # Not a problem package-contains-documentation-outside-usr-share-doc usr/lib/grass*/etc/license -# False positive, part of NormalX, NormalY, NormalZ -spelling-error-in-binary usr/lib/grass*/bin/v.in.pdal NormalY Normally - # https://trac.osgeo.org/grass/ticket/3786 file-references-package-build-path diff -Nru grass-7.8.0~rc1/debian/rules grass-7.8.0/debian/rules --- grass-7.8.0~rc1/debian/rules 2019-08-30 12:07:17.000000000 +0000 +++ grass-7.8.0/debian/rules 2019-09-07 09:41:00.000000000 +0000 @@ -6,9 +6,6 @@ # Enable hardening build flags export DEB_BUILD_MAINT_OPTIONS=hardening=+all -# Workaround for proj_api.h deprecation in PROJ 6.0.0 -export DEB_CFLAGS_MAINT_APPEND=-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H - # Disable PIE on Ubuntu where it's still problematic VENDOR_DERIVES_FROM_UBUNTU ?= $(shell dpkg-vendor --derives-from Ubuntu && echo yes) DISTRIBUTION_RELEASE := $(shell lsb_release -cs) diff -Nru grass-7.8.0~rc1/doc/howto_release.md grass-7.8.0/doc/howto_release.md --- grass-7.8.0~rc1/doc/howto_release.md 2019-08-13 21:41:57.000000000 +0000 +++ grass-7.8.0/doc/howto_release.md 2019-09-06 20:33:26.000000000 +0000 @@ -70,6 +70,7 @@ rm -f demolocation/PERMANENT/.bash* find . -name '*~' | xargs rm find . -name '*.bak' | xargs rm +find . -name '*.swp' | xargs rm find . -name '.#*' | xargs rm find . -name '*.orig' | xargs rm find . -name '*.rej' | xargs rm @@ -91,23 +92,19 @@ ### Update VERSION file to release version number -TODO: probably better done in GH interface?! +Directly edit in GH interface: -```bash -vim include/VERSION +https://github.com/OSGeo/grass/blob/releasebranch_7_8/include/VERSION + +Example: -#example: +```bash 7 8 0RC1 2019 ``` -Cleanup: -```bash -rm -f include/VERSION~ -``` - ~~Update OSGeo4W setup.hint file~~ ~~no longer needed~~ ~~vim mswindows/osgeo4w/setup_x86.hint.tmpl~~ @@ -117,7 +114,7 @@ See https://help.github.com/en/articles/creating-releases -Done in GH interface. +Preparation: ### Changelog and tagging etc @@ -129,11 +126,6 @@ VERSION=${MAJOR}_${MINOR}_${RELEASE} echo $VERSION -git checkout -b release_GRASS_GIS_$VERSION -git add include/VERSION -git commit -m"GRASS GIS $VERSION" include/VERSION -git push origin release_GRASS_GIS_$VERSION - # Create Changelog file on release branch: python tools/gitlog2changelog.py mv ChangeLog ChangeLog_$VERSION @@ -148,16 +140,26 @@ ### Tag release (on GitHub) ```bash -echo "grass_$VERSION" +echo "$VERSION" ``` -Do this in https://github.com/OSGeo/grass/releases/new +Done in GH interface: + +https://github.com/OSGeo/grass/releases/new ### Packaging of source code tarball -TODO: add checkout of code via release tag +TODO: add checkout of code via release tag (?) ```bash +# update from GH +# assumptions: +# - own fork as "origin" +# - remote repo as "upstream" + +git fetch --all --prune && git checkout releasebranch_7_8 && \ + git merge upstream/releasebranch_7_8 && git push origin releasebranch_7_8 + # create source package (in the source directory): echo grass-${VERSION} @@ -174,23 +176,17 @@ ### Reset include/VERSION file to git version: -TODO: probably better done in GH interface +Directly edit in GH interface: -```bash -vim include/VERSION +https://github.com/OSGeo/grass/blob/releasebranch_7_8/include/VERSION -#example +Example: + +```bash 7 8 0dev 2019 - -rm -f include/VERSION~ -git checkout -b back_to_git_dev -git add include/VERSION -git commit -m"back to git" include/VERSION -git push origin back_to_git_dev -# open PR and merge ``` ### Upload source code tarball to OSGeo servers Binary files /tmp/tmpEpiSJs/3PiFqBBgEG/grass-7.8.0~rc1/doc/.howto_release.md.swp and /tmp/tmpEpiSJs/6kdOkt7OZa/grass-7.8.0/doc/.howto_release.md.swp differ diff -Nru grass-7.8.0~rc1/docker/Dockerfile_alpine grass-7.8.0/docker/Dockerfile_alpine --- grass-7.8.0~rc1/docker/Dockerfile_alpine 2019-08-11 10:13:10.000000000 +0000 +++ grass-7.8.0/docker/Dockerfile_alpine 2019-08-27 14:33:28.000000000 +0000 @@ -101,6 +101,8 @@ openjpeg-dev \ openblas-dev \ postgresql-dev \ + python3-dev \ + py3-numpy-dev \ sqlite-dev \ tar \ tiff-dev \ diff -Nru grass-7.8.0~rc1/docker/Dockerfile_alpine_wxgui grass-7.8.0/docker/Dockerfile_alpine_wxgui --- grass-7.8.0~rc1/docker/Dockerfile_alpine_wxgui 2019-08-11 10:13:10.000000000 +0000 +++ grass-7.8.0/docker/Dockerfile_alpine_wxgui 2019-08-27 14:33:28.000000000 +0000 @@ -107,7 +107,7 @@ openblas-dev \ postgresql-dev \ python3-dev \ - py-numpy-dev \ + py3-numpy-dev \ sqlite-dev \ tar \ tiff-dev \ diff -Nru grass-7.8.0~rc1/gui/wxpython/animation/dialogs.py grass-7.8.0/gui/wxpython/animation/dialogs.py --- grass-7.8.0~rc1/gui/wxpython/animation/dialogs.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/animation/dialogs.py 2019-09-04 13:16:01.000000000 +0000 @@ -43,7 +43,7 @@ from gui_core.gselect import Select from gui_core.widgets import FloatValidator from gui_core.wrap import SpinCtrl, CheckBox, TextCtrl, Button, \ - BitmapButton, StaticText, StaticBox, Choice, RadioButton + BitmapButton, StaticText, StaticBox, Choice, RadioButton, EmptyImage from animation.utils import TemporalMode, getRegisteredMaps, getNameAndLayer, getCpuCount from animation.data import AnimationData, AnimLayer @@ -1085,7 +1085,7 @@ # image self.imageBox = wx.BoxSizer(wx.HORIZONTAL) - filetype, ltype = GetImageHandlers(wx.EmptyImage(10, 10)) + filetype, ltype = GetImageHandlers(EmptyImage(10, 10)) self.browse = filebrowse.FileBrowseButton( parent=panel, id=wx.ID_ANY, fileMask=filetype, labelText=_("Image file:"), @@ -1368,7 +1368,7 @@ def ChangeFormat(self, index): for i, panel in enumerate(self.formatPanels): - self.formatPanelSizer.Show(item=panel, show=(i == index)) + self.formatPanelSizer.Show(window=panel, show=(i == index)) self.formatPanelSizer.Layout() def OnFont(self, event): diff -Nru grass-7.8.0~rc1/gui/wxpython/animation/provider.py grass-7.8.0/gui/wxpython/animation/provider.py --- grass-7.8.0~rc1/gui/wxpython/animation/provider.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/animation/provider.py 2019-09-04 13:16:01.000000000 +0000 @@ -32,7 +32,7 @@ from core.utils import autoCropImageFromFile from animation.utils import HashCmd, HashCmds, GetFileFromCmd, GetFileFromCmds -from gui_core.wrap import EmptyBitmap +from gui_core.wrap import EmptyBitmap, BitmapFromImage import grass.script.core as gcore from grass.script.task import cmdlist_to_tuple @@ -308,7 +308,7 @@ cmdTuple[0], **cmdTuple[1]) if returncode == 0: - return wx.BitmapFromImage(autoCropImageFromFile(filename)) + return BitmapFromImage(autoCropImageFromFile(filename)) else: os.remove(filename) raise GException(messages) @@ -519,7 +519,7 @@ self._bitmapPool[ HashCmds( cmd_lists[i][0], - cmd_lists[i][1])] = wx.BitmapFromImage( + cmd_lists[i][1])] = BitmapFromImage( wx.Image(filename)) os.remove(filename) proc_count = 0 diff -Nru grass-7.8.0~rc1/gui/wxpython/animation/utils.py grass-7.8.0/gui/wxpython/animation/utils.py --- grass-7.8.0~rc1/gui/wxpython/animation/utils.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/animation/utils.py 2019-09-04 13:16:01.000000000 +0000 @@ -265,13 +265,8 @@ def WxImageToPil(image): """Converts wx.Image to PIL image""" pilImage = Image.new('RGB', (image.GetWidth(), image.GetHeight())) - getattr( - pilImage, - "frombytes", - getattr( - pilImage, - "fromstring"))( - image.GetData()) + getattr(pilImage, "frombytes", getattr(pilImage, "fromstring"))( + bytes(image.GetData())) return pilImage diff -Nru grass-7.8.0~rc1/gui/wxpython/core/workspace.py grass-7.8.0/gui/wxpython/core/workspace.py --- grass-7.8.0~rc1/gui/wxpython/core/workspace.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/core/workspace.py 2019-08-31 21:37:30.000000000 +0000 @@ -117,7 +117,7 @@ if node_lm is not None: posAttr = node_lm.get('dim', '') if posAttr: - posVal = map(int, posAttr.split(',')) + posVal = list(map(int, posAttr.split(','))) try: self.layerManager['pos'] = (posVal[0], posVal[1]) self.layerManager['size'] = (posVal[2], posVal[3]) @@ -137,7 +137,7 @@ # window position and size posAttr = display.get('dim', '') if posAttr: - posVal = map(int, posAttr.split(',')) + posVal = list(map(int, posAttr.split(','))) try: pos = (posVal[0], posVal[1]) size = (posVal[2], posVal[3]) diff -Nru grass-7.8.0~rc1/gui/wxpython/gcp/manager.py grass-7.8.0/gui/wxpython/gcp/manager.py --- grass-7.8.0~rc1/gui/wxpython/gcp/manager.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/gcp/manager.py 2019-08-31 21:37:30.000000000 +0000 @@ -1465,7 +1465,7 @@ if line[0] == '#' or line == '': continue line = line.replace('\n', '').strip() - coords = map(float, line.split()) + coords = list(map(float, line.split())) if coords[4] == 1: check = True self.GCPcount += 1 diff -Nru grass-7.8.0~rc1/gui/wxpython/gmodeler/dialogs.py grass-7.8.0/gui/wxpython/gmodeler/dialogs.py --- grass-7.8.0~rc1/gui/wxpython/gmodeler/dialogs.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/gmodeler/dialogs.py 2019-09-06 19:29:57.000000000 +0000 @@ -40,7 +40,7 @@ from gmodeler.model import * from lmgr.menudata import LayerManagerMenuData from gui_core.wrap import Button, StaticText, StaticBox, TextCtrl, \ - Menu + Menu, ListCtrl from grass.script import task as gtask @@ -577,7 +577,7 @@ cond = dialog.GetDSeries() if not cond: - cond = 'map in %s' % map(lambda x: str(x), dialog.GetMapLayers()) + cond = 'map in {}'.format(list(map(str, dialog.GetMapLayers()))) self.condText.SetValue(cond) @@ -671,7 +671,7 @@ 'else': self.itemListElse.GetItems()} -class ModelListCtrl(wx.ListCtrl, +class ModelListCtrl(ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.TextEditMixin): @@ -686,7 +686,7 @@ self.frame = frame self.columnNotEditable = columnsNotEditable - wx.ListCtrl.__init__(self, parent, id=id, style=style, **kwargs) + ListCtrl.__init__(self, parent, id=id, style=style, **kwargs) listmix.ListCtrlAutoWidthMixin.__init__(self) listmix.TextEditMixin.__init__(self) diff -Nru grass-7.8.0~rc1/gui/wxpython/gmodeler/model.py grass-7.8.0/gui/wxpython/gmodeler/model.py --- grass-7.8.0~rc1/gui/wxpython/gmodeler/model.py 2019-08-06 18:48:31.000000000 +0000 +++ grass-7.8.0/gui/wxpython/gmodeler/model.py 2019-08-31 21:37:30.000000000 +0000 @@ -2018,7 +2018,7 @@ pos = size = None posAttr = node.get('pos', None) if posAttr: - posVal = map(int, posAttr.split(',')) + posVal = list(map(int, posAttr.split(','))) try: pos = (posVal[0], posVal[1]) except: @@ -2026,7 +2026,7 @@ sizeAttr = node.get('size', None) if sizeAttr: - sizeVal = map(int, sizeAttr.split(',')) + sizeVal = list(map(int, sizeAttr.split(','))) try: size = (sizeVal[0], sizeVal[1]) except: diff -Nru grass-7.8.0~rc1/gui/wxpython/gui_core/preferences.py grass-7.8.0/gui/wxpython/gui_core/preferences.py --- grass-7.8.0~rc1/gui/wxpython/gui_core/preferences.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/gui_core/preferences.py 2019-09-06 19:29:57.000000000 +0000 @@ -2205,10 +2205,7 @@ for mapset in self.parent.all_mapsets_ordered: # unclear why this is needed, # wrap.ListrCtrl should do the job but it doesn't in this case - if wxPythonPhoenix: - index = self.InsertItem(self.GetItemCount(), mapset) - else: - index = self.InsertStringItem(self.GetItemCount(), mapset) + index = self.InsertStringItem(self.GetItemCount(), mapset) mapsetPath = os.path.join(locationPath, mapset) stat_info = os.stat(mapsetPath) diff -Nru grass-7.8.0~rc1/gui/wxpython/gui_core/vselect.py grass-7.8.0/gui/wxpython/gui_core/vselect.py --- grass-7.8.0~rc1/gui/wxpython/gui_core/vselect.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/gui_core/vselect.py 2019-09-06 19:29:57.000000000 +0000 @@ -27,18 +27,18 @@ from core.gcmd import GMessage, GError, GWarning from core.gcmd import RunCommand -from gui_core.wrap import Button +from gui_core.wrap import Button, ListCtrl import grass.script as grass from grass.pydispatch.signal import Signal -class VectorSelectList(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin): +class VectorSelectList(ListCtrl, listmix.ListCtrlAutoWidthMixin): """Widget for managing vector features selected from map display """ def __init__(self, parent): - wx.ListCtrl.__init__( + ListCtrl.__init__( self, parent=parent, id=wx.ID_ANY, diff -Nru grass-7.8.0~rc1/gui/wxpython/gui_core/widgets.py grass-7.8.0/gui/wxpython/gui_core/widgets.py --- grass-7.8.0~rc1/gui/wxpython/gui_core/widgets.py 2019-08-11 07:34:26.000000000 +0000 +++ grass-7.8.0/gui/wxpython/gui_core/widgets.py 2019-09-06 19:29:57.000000000 +0000 @@ -1034,10 +1034,7 @@ idx = 0 for item in data: - if wxPythonPhoenix: - index = self.InsertItem(idx, str(item[0])) - else: - index = self.InsertStringItem(idx, str(item[0])) + index = self.InsertStringItem(idx, str(item[0])) for i in range(1, self.GetColumnCount()): self.SetStringItem(index, i, item[i]) idx += 1 diff -Nru grass-7.8.0~rc1/gui/wxpython/gui_core/wxlibplot.py grass-7.8.0/gui/wxpython/gui_core/wxlibplot.py --- grass-7.8.0~rc1/gui/wxpython/gui_core/wxlibplot.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/gui_core/wxlibplot.py 2019-08-31 21:37:30.000000000 +0000 @@ -1209,7 +1209,7 @@ else: # on Linux, we need to correct the font size by a certain factor if wx.GCDC is used, # to make text the same size as if wx.GCDC weren't used - screenppi = map(float, wx.ScreenDC().GetPPI()) + screenppi = list(map(float, wx.ScreenDC().GetPPI())) ppi = dc.GetPPI() self._fontScale = (screenppi[ 0] / ppi[0] * self._pointSize[0] + screenppi[1] / ppi[1] * self._pointSize[1]) / 2.0 diff -Nru grass-7.8.0~rc1/gui/wxpython/image2target/ii2t_manager.py grass-7.8.0/gui/wxpython/image2target/ii2t_manager.py --- grass-7.8.0~rc1/gui/wxpython/image2target/ii2t_manager.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/image2target/ii2t_manager.py 2019-08-31 21:37:30.000000000 +0000 @@ -1527,7 +1527,7 @@ if line[0] == '#' or line == '': continue line = line.replace('\n', '').strip() - coords = map(float, line.split()) + coords = list(map(float, line.split())) if coords[6] == 1: check = True self.GCPcount += 1 diff -Nru grass-7.8.0~rc1/gui/wxpython/mapdisp/main.py grass-7.8.0/gui/wxpython/mapdisp/main.py --- grass-7.8.0~rc1/gui/wxpython/mapdisp/main.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/mapdisp/main.py 2019-09-06 09:20:12.000000000 +0000 @@ -350,7 +350,7 @@ def __iter__(self): return self - def next(self): + def __next__(self): items = self._map.GetListOfLayers() try: result = items[self._index] @@ -359,6 +359,9 @@ self._index += 1 return result + def next(self): + return self.__next__() + def GetSelectedLayers(self, checkedOnly=True): # hidden and selected vs checked and selected items = self._map.GetListOfLayers() @@ -560,10 +563,12 @@ def OnExit(self): if __name__ == "__main__": # stop the timer - # self.timer.Stop() + if self.timer.IsRunning: + self.timer.Stop() # terminate thread for f in six.itervalues(monFile): try_remove(f) + return True def watcher(self): """Redraw, if new layer appears (check's timestamp of diff -Nru grass-7.8.0~rc1/gui/wxpython/photo2image/ip2i_manager.py grass-7.8.0/gui/wxpython/photo2image/ip2i_manager.py --- grass-7.8.0~rc1/gui/wxpython/photo2image/ip2i_manager.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/photo2image/ip2i_manager.py 2019-08-31 21:37:30.000000000 +0000 @@ -888,7 +888,7 @@ if line[0] == '#' or line == '': continue line = line.replace('\n', '').strip() - coords = map(float, line.split()) + coords = list(map(float, line.split())) if coords[4] == 1: check = True self.GCPcount += 1 diff -Nru grass-7.8.0~rc1/gui/wxpython/psmap/dialogs.py grass-7.8.0/gui/wxpython/psmap/dialogs.py --- grass-7.8.0~rc1/gui/wxpython/psmap/dialogs.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/psmap/dialogs.py 2019-09-06 19:29:57.000000000 +0000 @@ -73,7 +73,7 @@ from core.gcmd import RunCommand, GError, GMessage from gui_core.dialogs import SymbolDialog from gui_core.wrap import SpinCtrl, Button, TextCtrl, BitmapButton, \ - StaticText, StaticBox, Rect, EmptyBitmap, TextEntryDialog + StaticText, StaticBox, Rect, EmptyBitmap, TextEntryDialog, ListCtrl from psmap.utils import * from psmap.instructions import * @@ -201,11 +201,11 @@ return -1 # default - will be measured from text width -class CheckListCtrl(wx.ListCtrl, CheckListCtrlMixin, ListCtrlAutoWidthMixin): +class CheckListCtrl(ListCtrl, CheckListCtrlMixin, ListCtrlAutoWidthMixin): """List control for managing order and labels of vector maps in legend""" def __init__(self, parent): - wx.ListCtrl.__init__( + ListCtrl.__init__( self, parent, id=wx.ID_ANY, style=wx.LC_REPORT | wx.LC_SINGLE_SEL | wx.BORDER_SUNKEN | wx.LC_VRULES | wx.LC_HRULES) CheckListCtrlMixin.__init__(self) diff -Nru grass-7.8.0~rc1/gui/wxpython/psmap/instructions.py grass-7.8.0/gui/wxpython/psmap/instructions.py --- grass-7.8.0~rc1/gui/wxpython/psmap/instructions.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/psmap/instructions.py 2019-08-31 21:37:30.000000000 +0000 @@ -1442,7 +1442,7 @@ else: instr['scalebar'] = 'f' elif line.startswith('where'): - instr['where'] = map(float, line.split()[1:3]) + instr['where'] = list(map(float, line.split()[1:3])) elif line.startswith('length'): instr['length'] = float(line.split()[1]) elif line.startswith('units'): @@ -1550,7 +1550,7 @@ for line in text: try: if line.startswith('where'): - instr['where'] = map(float, line.split()[1:3]) + instr['where'] = list(map(float, line.split()[1:3])) elif line.startswith('font '): instr['font'] = line.split()[1] elif line.startswith('fontsize'): @@ -1716,7 +1716,7 @@ for line in text: try: if line.startswith('where'): - instr['where'] = map(float, line.split()[1:3]) + instr['where'] = list(map(float, line.split()[1:3])) elif line.startswith('font '): instr['font'] = line.split()[1] elif line.startswith('fontsize'): diff -Nru grass-7.8.0~rc1/gui/wxpython/vdigit/dialogs.py grass-7.8.0/gui/wxpython/vdigit/dialogs.py --- grass-7.8.0~rc1/gui/wxpython/vdigit/dialogs.py 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/gui/wxpython/vdigit/dialogs.py 2019-09-06 19:29:57.000000000 +0000 @@ -29,7 +29,7 @@ from core.debug import Debug from core.settings import UserSettings from gui_core.wrap import SpinCtrl, Button, StaticText, \ - StaticBox, Menu + StaticBox, Menu, ListCtrl class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin): @@ -554,7 +554,7 @@ return True -class CategoryListCtrl(wx.ListCtrl, +class CategoryListCtrl(ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.TextEditMixin): @@ -563,7 +563,7 @@ """List of layers/categories""" self.parent = parent - wx.ListCtrl.__init__(self, parent, id, pos, size, style) + ListCtrl.__init__(self, parent, id, pos, size, style) listmix.ListCtrlAutoWidthMixin.__init__(self) listmix.TextEditMixin.__init__(self) @@ -775,7 +775,7 @@ class CheckListFeature( - wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCtrlMixin): + ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCtrlMixin): def __init__(self, parent, data, pos=wx.DefaultPosition, log=None): @@ -784,8 +784,7 @@ self.parent = parent self.data = data - wx.ListCtrl.__init__(self, parent, wx.ID_ANY, - style=wx.LC_REPORT) + ListCtrl.__init__(self, parent, wx.ID_ANY, style=wx.LC_REPORT) listmix.CheckListCtrlMixin.__init__(self) diff -Nru grass-7.8.0~rc1/include/Make/Docs.make grass-7.8.0/include/Make/Docs.make --- grass-7.8.0~rc1/include/Make/Docs.make 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/include/Make/Docs.make 2019-08-27 11:50:55.000000000 +0000 @@ -91,7 +91,7 @@ $(call html_pdf vector,v.*.html) changelog: - @ echo "creating ChangeLog file (following 'master' only)..." + @ echo "creating ChangeLog file (following 'releasebranch_7_8' only)..." @ # tools/gitlog2changelog.py creates a GNU style ChangeLog file: python tools/gitlog2changelog.py diff -Nru grass-7.8.0~rc1/include/VERSION grass-7.8.0/include/VERSION --- grass-7.8.0~rc1/include/VERSION 2019-08-14 16:56:03.000000000 +0000 +++ grass-7.8.0/include/VERSION 2019-09-06 20:33:26.000000000 +0000 @@ -1,4 +1,4 @@ 7 8 -0RC1 +0 2019 diff -Nru grass-7.8.0~rc1/lib/gis/gisinit.c grass-7.8.0/lib/gis/gisinit.c --- grass-7.8.0~rc1/lib/gis/gisinit.c 2019-05-18 15:50:04.000000000 +0000 +++ grass-7.8.0/lib/gis/gisinit.c 2019-09-04 13:16:01.000000000 +0000 @@ -49,11 +49,13 @@ G_set_program_name(pgm); + /* temporary disabled since svn keywords are not maintained by git if (strcmp(version, GIS_H_VERSION) != 0) G_fatal_error(_("Module built against version %s but " "trying to use version %s. " "You need to rebuild GRASS GIS or untangle multiple installations."), version, GIS_H_VERSION); + */ /* Make sure location and mapset are set */ G_location_path(); diff -Nru grass-7.8.0~rc1/lib/gis/parser_help.c grass-7.8.0/lib/gis/parser_help.c --- grass-7.8.0~rc1/lib/gis/parser_help.c 2019-05-18 15:50:04.000000000 +0000 +++ grass-7.8.0/lib/gis/parser_help.c 2019-09-04 13:16:01.000000000 +0000 @@ -185,10 +185,18 @@ /* Print help info for flags */ - fprintf(fp, "\n"); - if (markers) - fprintf(fp, "{{{FLAGS}}}\n"); - fprintf(fp, "%s\n", _("Flags:")); + /* Show section only when there are flags. + * There are always the standard flags if we are printing those. + * There is no use case for the markers, so no way to decide if + * the marker for flags is mandatory and should be empty if it is + * okay for it to be missing like in the current implementation. + */ + if (st->n_flags || standard) { + fprintf(fp, "\n"); + if (markers) + fprintf(fp, "{{{FLAGS}}}\n"); + fprintf(fp, "%s\n", _("Flags:")); + } if (st->n_flags) { flag = &st->first_flag; diff -Nru grass-7.8.0~rc1/lib/gis/parser_json.c grass-7.8.0/lib/gis/parser_json.c --- grass-7.8.0~rc1/lib/gis/parser_json.c 2019-06-03 20:34:20.000000000 +0000 +++ grass-7.8.0/lib/gis/parser_json.c 2019-08-19 12:36:45.000000000 +0000 @@ -187,7 +187,7 @@ /*FILE *fp = NULL;*/ char *type; char *file_name = NULL; - char c; + int c; int random_int = rand(); int num_flags = 0; int num_inputs = 0; @@ -436,7 +436,7 @@ { int i = 0; char **tokens; - char *mapset; + const char *mapset; mapset = G_mapset(); diff -Nru grass-7.8.0~rc1/lib/init/grass.py grass-7.8.0/lib/init/grass.py --- grass-7.8.0~rc1/lib/init/grass.py 2019-08-06 18:48:31.000000000 +0000 +++ grass-7.8.0/lib/init/grass.py 2019-08-16 07:54:58.000000000 +0000 @@ -654,9 +654,9 @@ # GRASS_PYTHON if not os.getenv('GRASS_PYTHON'): if WINDOWS: - os.environ['GRASS_PYTHON'] = "python.exe" + os.environ['GRASS_PYTHON'] = "python3.exe" else: - os.environ['GRASS_PYTHON'] = "python" + os.environ['GRASS_PYTHON'] = "python3" # GRASS_GNUPLOT if not os.getenv('GRASS_GNUPLOT'): diff -Nru grass-7.8.0~rc1/lib/python/pygrass/rpc/base.py grass-7.8.0/lib/python/pygrass/rpc/base.py --- grass-7.8.0~rc1/lib/python/pygrass/rpc/base.py 2019-05-18 15:50:04.000000000 +0000 +++ grass-7.8.0/lib/python/pygrass/rpc/base.py 2019-08-19 12:43:49.000000000 +0000 @@ -91,6 +91,8 @@ self.start_server() self.start_checker_thread() self.stopThread = False + self.stopped = True + # logging.basicConfig(level=logging.DEBUG) def is_server_alive(self): return self.server.is_alive() @@ -117,11 +119,9 @@ """Check every 200 micro seconds if the server process is alive""" while True: time.sleep(0.2) - # sys.stderr.write("Check server process\n") self._check_restart_server(caller="Server check thread") self.threadLock.acquire() if self.stopThread == True: - #sys.stderr.write("Stop thread\n") self.threadLock.release() return self.threadLock.release() @@ -129,6 +129,8 @@ def start_server(self): """This function must be re-implemented in the subclasses """ + logging.debug("Start the libgis server") + self.client_conn, self.server_conn = Pipe(True) self.lock = Lock() self.server = Process(target=dummy_server, args=(self.lock, @@ -142,6 +144,8 @@ def _check_restart_server(self, caller="main thread"): """Restart the server if it was terminated """ + logging.debug("Check libgis server restart") + self.threadLock.acquire() if self.server.is_alive() is True: self.threadLock.release() @@ -150,13 +154,17 @@ self.server_conn.close() self.start_server() - logging.warning("Needed to restart the libgis server, caller: %s"%(caller)) + if self.stopped is not True: + logging.warning("Needed to restart the libgis server, caller: %s"%(caller)) self.threadLock.release() + self.stopped = False def safe_receive(self, message): """Receive the data and throw a FatalError exception in case the server process was killed and the pipe was closed by the checker thread""" + logging.debug("Receive message: {message}") + try: ret = self.client_conn.recv() if isinstance(ret, FatalError): @@ -172,13 +180,15 @@ This method should be called at exit using the package atexit """ - #sys.stderr.write("###### Stop was called\n") + logging.debug("Stop libgis server") + self.stop_checker_thread() if self.server is not None and self.server.is_alive(): self.client_conn.send([0, ]) self.server.terminate() if self.client_conn is not None: self.client_conn.close() + self.stopped = True if __name__ == "__main__": diff -Nru grass-7.8.0~rc1/lib/python/script/core.py grass-7.8.0/lib/python/script/core.py --- grass-7.8.0~rc1/lib/python/script/core.py 2019-08-11 09:05:20.000000000 +0000 +++ grass-7.8.0/lib/python/script/core.py 2019-08-16 07:57:51.000000000 +0000 @@ -201,7 +201,7 @@ # we assume that PATHEXT contains always '.py' pathext.insert(0, '.py') # See if the given file matches any of the expected path extensions. - # This will allow us to short circuit when given "python.exe". + # This will allow us to short circuit when given "python3.exe". # If it does match, only test that one, otherwise we have to try # others. if any(cmd.lower().endswith(ext) for ext in pathext): diff -Nru grass-7.8.0~rc1/lib/python/script/setup.py grass-7.8.0/lib/python/script/setup.py --- grass-7.8.0~rc1/lib/python/script/setup.py 2019-08-11 09:05:20.000000000 +0000 +++ grass-7.8.0/lib/python/script/setup.py 2019-08-16 07:57:51.000000000 +0000 @@ -188,9 +188,9 @@ # Set GRASS_PYTHON and PYTHONPATH to find GRASS Python modules if not os.getenv('GRASS_PYTHON'): if sys.platform == 'win32': - os.environ['GRASS_PYTHON'] = "python.exe" + os.environ['GRASS_PYTHON'] = "python3.exe" else: - os.environ['GRASS_PYTHON'] = "python" + os.environ['GRASS_PYTHON'] = "python3" path = os.getenv('PYTHONPATH') etcpy = os.path.join(gisbase, 'etc', 'python') diff -Nru grass-7.8.0~rc1/locale/po/grasslibs_fr.po grass-7.8.0/locale/po/grasslibs_fr.po --- grass-7.8.0~rc1/locale/po/grasslibs_fr.po 2019-08-11 07:55:01.000000000 +0000 +++ grass-7.8.0/locale/po/grasslibs_fr.po 2019-09-06 19:20:17.000000000 +0000 @@ -9660,7 +9660,7 @@ #: ../lib/vector/Vlib/break_polygons.c:286 #: ../lib/vector/Vlib/break_polygons.c:552 msgid "Breaking polygons (pass 2: break at selected points)..." -msgstr "Coupure dex polygones (passe 2 : coupure aux points sélectionnés) ..." +msgstr "Coupure des polygones (passe 2 : coupure aux points sélectionnés) ..." #: ../lib/vector/Vlib/break_polygons.c:398 #: ../lib/vector/Vlib/break_polygons.c:650 diff -Nru grass-7.8.0~rc1/locale/po/grasslibs_tr.po grass-7.8.0/locale/po/grasslibs_tr.po --- grass-7.8.0~rc1/locale/po/grasslibs_tr.po 2019-08-11 07:55:01.000000000 +0000 +++ grass-7.8.0/locale/po/grasslibs_tr.po 2019-09-06 19:20:17.000000000 +0000 @@ -6824,11 +6824,11 @@ #: ../lib/db/dbmi_base/error.c:91 msgid "dbmi: Protocol error" -msgstr "" +msgstr "dbmi: Protokol hatası" #: ../lib/db/dbmi_base/error.c:136 msgid "dbmi: Out of Memory" -msgstr "" +msgstr "dbmi: Yetersiz Bellek" #: ../lib/db/dbmi_base/error.c:149 #, c-format diff -Nru grass-7.8.0~rc1/locale/po/grasslibs_zh.po grass-7.8.0/locale/po/grasslibs_zh.po --- grass-7.8.0~rc1/locale/po/grasslibs_zh.po 2019-08-11 07:55:01.000000000 +0000 +++ grass-7.8.0/locale/po/grasslibs_zh.po 2019-09-06 19:20:17.000000000 +0000 @@ -237,7 +237,7 @@ #: ../lib/arraystats/class.c:19 #, c-format msgid "Unknown algorithm '%s'" -msgstr "" +msgstr "未知算法 '%s'" #: ../lib/arraystats/class.c:42 msgid "Discont algorithm currently not available because of bugs" diff -Nru grass-7.8.0~rc1/locale/po/grassmods_hu.po grass-7.8.0/locale/po/grassmods_hu.po --- grass-7.8.0~rc1/locale/po/grassmods_hu.po 2019-08-11 07:55:01.000000000 +0000 +++ grass-7.8.0/locale/po/grassmods_hu.po 2019-09-06 19:20:17.000000000 +0000 @@ -807,7 +807,7 @@ #: ../vector/v.distance/main.c:124 ../vector/v.vect.stats/main.c:131 #: ../vector/v.to.db/main.c:39 msgid "attribute table" -msgstr "" +msgstr "attribútum tábla" #: ../locale/scriptstrings/v.db.addtable_to_translate.c:4 #: ../locale/scriptstrings/db.droptable_to_translate.c:2 @@ -836,7 +836,7 @@ #: ../vector/v.in.db/main.c:54 ../vector/v.vect.stats/main.c:132 #: ../vector/v.to.db/main.c:40 msgid "database" -msgstr "" +msgstr "adatbázis" #: ../locale/scriptstrings/v.db.addtable_to_translate.c:5 msgid "Name of new attribute table (default: vector map name)" @@ -5756,7 +5756,7 @@ #: ../vector/v.edit/select.c:509 #, c-format msgid "Unable to start driver <%s>" -msgstr "" +msgstr "Nem tudom elindítani a <%s> meghajtót" #: ../doc/vector/v.example/main.c:142 ../db/db.columns/main.c:62 #: ../db/db.describe/main.c:67 ../vector/v.out.vtk/writeVTK.c:655 @@ -19227,7 +19227,7 @@ #: ../db/db.tables/main.c:50 #, c-format msgid "Unable to open database <%s>" -msgstr "" +msgstr "Nem tudom megnyitni a <%s> adatbázist" #: ../display/d.vect.thematic/main.c:312 #, c-format @@ -28961,7 +28961,7 @@ #: ../db/db.dropdb/main.c:73 ../db/db.createdb/main.c:73 #: ../vector/v.db.select/main.c:57 msgid "SQL" -msgstr "" +msgstr "SQL" #: ../db/db.databases/main.c:99 msgid "Lists all databases for a given driver and location." @@ -28982,7 +28982,7 @@ #: ../db/db.drivers/main.c:72 ../db/db.connect/main.c:45 #: ../db/db.login/main.c:41 msgid "connection settings" -msgstr "" +msgstr "csatlakozás beállítások" #: ../db/db.drivers/main.c:73 msgid "Lists all database drivers." @@ -28992,15 +28992,15 @@ #: ../db/db.describe/main.c:50 ../db/db.select/main.c:53 #, c-format msgid "Table <%s> not found in database <%s> using driver <%s>" -msgstr "" +msgstr "<%s> táblát nem találom a <%s> adatbázisban, a <%s> meghajtót használva" #: ../db/db.columns/main.c:101 msgid "List all columns for a given table." -msgstr "" +msgstr "Oszlopok listája az adott táblából." #: ../db/db.copy/main.c:38 msgid "Copy a table." -msgstr "" +msgstr "Egy tábla másolása." #: ../db/db.copy/main.c:40 msgid "Either 'from_table' (optionally with 'where') can be used or 'select' option, but not 'from_table' and 'select' at the same time." @@ -29084,11 +29084,11 @@ #: ../db/db.connect/main.c:182 msgid "Default driver is not set" -msgstr "" +msgstr "Alapértelmezett meghajtó nincs beállítva" #: ../db/db.connect/main.c:185 msgid "Default database is not set" -msgstr "" +msgstr "Alapértelmezett adatbázis nincs beállítva" #: ../db/db.connect/main.c:221 msgid "Unable to set default database connection" diff -Nru grass-7.8.0~rc1/locale/po/grasswxpy_hu.po grass-7.8.0/locale/po/grasswxpy_hu.po --- grass-7.8.0~rc1/locale/po/grasswxpy_hu.po 2019-08-11 07:55:01.000000000 +0000 +++ grass-7.8.0/locale/po/grasswxpy_hu.po 2019-09-06 19:20:17.000000000 +0000 @@ -435,7 +435,7 @@ #: ../gui/wxpython/gui_core/menu.py:174 ../gui/wxpython/gmodeler/model.py:2837 #: ../gui/wxpython/gmodeler/frame.py:1984 msgid "&Run" -msgstr "" +msgstr "Futtatás" #: ../gui/wxpython/modules/mcalc_builder.py:164 msgid "Save expression to file" @@ -453,7 +453,7 @@ #: ../gui/wxpython/modules/mcalc_builder.py:170 #: ../gui/wxpython/gui_core/forms.py:632 msgid "Copy the current command string to the clipboard" -msgstr "" +msgstr "Aktuális parancs szövegének másolása a vágólapra" #: ../gui/wxpython/modules/mcalc_builder.py:174 msgid "exponent" @@ -653,7 +653,7 @@ #: ../gui/wxpython/gui_core/forms.py:2047 #: ../gui/wxpython/web_services/widgets.py:939 msgid "Layer name" -msgstr "" +msgstr "Rétegnév" #: ../gui/wxpython/modules/import_export.py:80 msgid "Name for output GRASS map (editable)" @@ -1231,7 +1231,7 @@ #: ../gui/wxpython/gmodeler/frame.py:2078 #, python-format msgid "File <%s> already exists. Do you want to overwrite this file?" -msgstr "" +msgstr "<%s> fájl már létezik. Felül akarja írni ezt a fájlt?" #: ../gui/wxpython/wxplot/profile.py:377 msgid "Overwrite file?" @@ -1418,7 +1418,7 @@ #: ../gui/wxpython/wxplot/dialogs.py:966 ../gui/wxpython/core/workspace.py:1671 #: ../gui/wxpython/core/gcmd.py:143 ../gui/wxpython/mapwin/buffered.py:2137 msgid "Warning" -msgstr "" +msgstr "Figyelmeztetés" #: ../gui/wxpython/wxplot/dialogs.py:987 ../gui/wxpython/wxplot/base.py:523 #: ../gui/wxpython/wxplot/base.py:600 @@ -1897,7 +1897,7 @@ #: ../gui/wxpython/iclass/frame.py:1140 ../gui/wxpython/gmodeler/frame.py:565 msgid "File already exists" -msgstr "" +msgstr "A fájl már létezik" #: ../gui/wxpython/iclass/frame.py:1190 msgid "No imagery group selected. Operation canceled." @@ -2010,13 +2010,13 @@ #: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:92 msgid "Name of raster map:" -msgstr "" +msgstr "Rasztertérkép neve:" #: ../gui/wxpython/iclass/dialogs.py:261 #: ../gui/wxpython/gui_core/dialogs.py:242 #: ../gui/wxpython/gmodeler/dialogs.py:94 msgid "Name of vector map:" -msgstr "" +msgstr "Vektortérkép neve:" #: ../gui/wxpython/iclass/dialogs.py:297 ../gui/wxpython/iscatt/frame.py:145 msgid "Classes" @@ -2620,23 +2620,23 @@ #: ../gui/wxpython/location_wizard/wizard.py:325 msgid "Choose method for creating a new location" -msgstr "" +msgstr "Válasszon módszert az új hely létrehozásához" #: ../gui/wxpython/location_wizard/wizard.py:332 msgid "Select EPSG code of spatial reference system" -msgstr "" +msgstr "Válasszon EPSG kódot a vetülethez" #: ../gui/wxpython/location_wizard/wizard.py:338 msgid "Read projection and datum terms from a georeferenced data file" -msgstr "" +msgstr "Olvass be a vetületet és a dátumot egy georeferált adatfájlból" #: ../gui/wxpython/location_wizard/wizard.py:342 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file" -msgstr "" +msgstr "Olvass be a vetületet és a dátumot egy Well Known Text (WKT) .prj fájlból" #: ../gui/wxpython/location_wizard/wizard.py:345 msgid "Select coordinate system parameters from a list" -msgstr "" +msgstr "Válassza ki a koordináta-rendszer paramétereit egy listából" #: ../gui/wxpython/location_wizard/wizard.py:348 msgid "Specify projection and datum terms using custom PROJ.4 parameters" @@ -2644,15 +2644,15 @@ #: ../gui/wxpython/location_wizard/wizard.py:351 msgid "Create a generic Cartesian coordinate system (XY)" -msgstr "" +msgstr "Hozzon létre egy általános derékszögű koordináta-rendszert (XY)" #: ../gui/wxpython/location_wizard/wizard.py:355 msgid "Simple methods:" -msgstr "" +msgstr "Egyszerű módszerek:" #: ../gui/wxpython/location_wizard/wizard.py:367 msgid "Advanced methods:" -msgstr "" +msgstr "Haladó módszerek:" #: ../gui/wxpython/location_wizard/wizard.py:470 msgid "Choose projection" @@ -2689,7 +2689,7 @@ #: ../gui/wxpython/location_wizard/wizard.py:677 #, python-format msgid "Unable to read list: %s" -msgstr "" +msgstr "Nem tudom beolvasni a listát: %s" #: ../gui/wxpython/location_wizard/wizard.py:782 msgid "Choose projection parameters" @@ -2710,29 +2710,29 @@ #: ../gui/wxpython/location_wizard/wizard.py:865 #, python-format msgid "You must enter a value for %s" -msgstr "" +msgstr "Meg kell adnia egy értéket ehhez %s" #: ../gui/wxpython/location_wizard/wizard.py:884 #: ../gui/wxpython/location_wizard/wizard.py:905 #, python-format msgid " Enter parameters for %s projection " -msgstr "" +msgstr "Adja meg a paramétereket a %s vetülethez" #: ../gui/wxpython/location_wizard/wizard.py:935 #: ../gui/wxpython/gui_core/gselect.py:2096 #: ../gui/wxpython/gmodeler/dialogs.py:922 msgid "No" -msgstr "" +msgstr "Nem" #: ../gui/wxpython/location_wizard/wizard.py:935 #: ../gui/wxpython/gui_core/gselect.py:2098 #: ../gui/wxpython/gmodeler/dialogs.py:924 msgid "Yes" -msgstr "" +msgstr "Igen" #: ../gui/wxpython/location_wizard/wizard.py:990 msgid "Specify geodetic datum" -msgstr "" +msgstr "Adja meg a geodéziai dátumot" #: ../gui/wxpython/location_wizard/wizard.py:1013 msgid "Ellipsoid" @@ -2744,7 +2744,7 @@ #: ../gui/wxpython/location_wizard/wizard.py:1165 msgid "Specify ellipsoid" -msgstr "" +msgstr "Adja meg az ellipszoidot" #: ../gui/wxpython/location_wizard/wizard.py:1182 msgid "Earth based" @@ -2761,7 +2761,7 @@ #: ../gui/wxpython/location_wizard/wizard.py:1341 #: ../gui/wxpython/location_wizard/wizard.py:1401 msgid "Select georeferenced file" -msgstr "" +msgstr "Válaszon georeferált fájlt" #: ../gui/wxpython/location_wizard/wizard.py:1346 msgid "Georeferenced file:" @@ -2770,7 +2770,7 @@ #: ../gui/wxpython/location_wizard/wizard.py:1417 #: ../gui/wxpython/location_wizard/wizard.py:1475 msgid "Select Well Known Text (WKT) .prj file" -msgstr "" +msgstr "Válasszon Well Known Text (WKT) .prj fájlt" #: ../gui/wxpython/location_wizard/wizard.py:1422 msgid "WKT .prj file:" @@ -2782,7 +2782,7 @@ #: ../gui/wxpython/location_wizard/wizard.py:1502 msgid "Path to the EPSG-codes file:" -msgstr "" +msgstr "Elérési út az EPSG kódok fájlhoz:" #: ../gui/wxpython/location_wizard/wizard.py:1505 #: ../gui/wxpython/gui_core/preferences.py:1722 @@ -2807,11 +2807,11 @@ #: ../gui/wxpython/location_wizard/wizard.py:1717 msgid "Choose IAU Code" -msgstr "" +msgstr "Válasszon IAU kódot" #: ../gui/wxpython/location_wizard/wizard.py:1726 msgid "Path to the IAU-codes file:" -msgstr "" +msgstr "Elérési út az IAU kódok fájlhoz:" #: ../gui/wxpython/location_wizard/wizard.py:1729 msgid "IAU code:" @@ -2819,12 +2819,12 @@ #: ../gui/wxpython/location_wizard/wizard.py:1911 msgid "Choose IAU codes file" -msgstr "" +msgstr "Válasszon IAU kódok fájlt" #: ../gui/wxpython/location_wizard/wizard.py:1946 #, python-brace-format msgid "Unable to read IAU codes: {0}" -msgstr "" +msgstr "Nem tudom beolvasni az IAU kódokat: {0}" #: ../gui/wxpython/location_wizard/wizard.py:1966 msgid "Choose method of specifying georeferencing parameters" @@ -2832,7 +2832,7 @@ #: ../gui/wxpython/location_wizard/wizard.py:1975 msgid "Enter PROJ.4 parameters string:" -msgstr "" +msgstr "Adja meg a PROJ.! paraméter szövegláncot:" #: ../gui/wxpython/location_wizard/wizard.py:2031 #: ../gui/wxpython/location_wizard/wizard.py:2035 @@ -2893,10 +2893,13 @@ "\n" "Details: %(err)s" msgstr "" +"Nem tudom létrehozni az új helyet. <%(loc)s> nem hoztam létre.\n" +"\n" +"Részletek: %(err)s" #: ../gui/wxpython/location_wizard/wizard.py:2428 msgid "Location wizard canceled. Location not created." -msgstr "" +msgstr "a hely varázsló futása megszakadt. A helyet nem hoztam létre." #: ../gui/wxpython/location_wizard/wizard.py:2561 msgid "Unable to create new location" @@ -2909,7 +2912,7 @@ #: ../gui/wxpython/location_wizard/wizard.py:2588 #, python-format msgid "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will need to change the default GIS data directory in the GRASS startup screen." -msgstr "" +msgstr "<%(loc)s> helyet a <%(dir)s> GIS adat könyvtárban hoztam létre. Meg kell változtatnia az alapértelmezett GIS adat könyvtárat a GRASS induló képernyőjén." #: ../gui/wxpython/location_wizard/wizard.py:2593 msgid "New GIS data directory" @@ -2921,7 +2924,7 @@ #: ../gui/wxpython/location_wizard/wizard.py:2634 msgid "IAU code missing." -msgstr "" +msgstr "IAU kód hiányzik." #: ../gui/wxpython/location_wizard/wizard.py:2645 #: ../gui/wxpython/location_wizard/wizard.py:2654 @@ -3519,7 +3522,7 @@ #: ../gui/wxpython/core/render.py:1033 ../gui/wxpython/core/render.py:1036 #: ../gui/wxpython/core/render.py:1039 ../gui/wxpython/core/gcmd.py:438 msgid "Details:" -msgstr "" +msgstr "Részletek:" #: ../gui/wxpython/core/render.py:1035 #, python-format @@ -3591,25 +3594,25 @@ #: ../gui/wxpython/image2target/ii2t_gis_set.py:683 #: ../gui/wxpython/lmgr/frame.py:2615 msgid "Message" -msgstr "" +msgstr "Üzenet" #: ../gui/wxpython/core/gcmd.py:435 msgid "Execution failed:" -msgstr "" +msgstr "Végrehajtási hiba:" #: ../gui/wxpython/core/gcmd.py:440 ../gui/wxpython/core/gcmd.py:447 msgid "Error: " -msgstr "" +msgstr "Hiba:" #: ../gui/wxpython/core/gcmd.py:524 #, python-format msgid "Unable to exectute command: '%s'" -msgstr "" +msgstr "Nem tudom végrehajtani a parancsot: '%s'" #: ../gui/wxpython/core/gcmd.py:750 ../gui/wxpython/gui_core/forms.py:2775 #, python-format msgid "Error in %s" -msgstr "" +msgstr "Hiba ebben %s" #: ../gui/wxpython/core/debug.py:48 #, python-brace-format @@ -3791,23 +3794,23 @@ #: ../gui/wxpython/core/gconsole.py:538 #, python-format msgid "Module <%s> not found." -msgstr "" +msgstr "<%s> modult nem találom." #: ../gui/wxpython/core/gconsole.py:668 ../gui/wxpython/gmodeler/frame.py:302 #, python-format msgid "%d sec" -msgstr "" +msgstr "%d mp" #: ../gui/wxpython/core/gconsole.py:671 ../gui/wxpython/gmodeler/frame.py:305 #, python-format msgid "%(min)d min %(sec)d sec" -msgstr "" +msgstr "%(min)d perc %(sec)d mp" #: ../gui/wxpython/core/gconsole.py:675 ../gui/wxpython/gui_core/ghelp.py:238 #: ../gui/wxpython/gmodeler/model.py:1125 #: ../gui/wxpython/gmodeler/model.py:1231 ../gui/wxpython/gmodeler/frame.py:309 msgid "unknown" -msgstr "" +msgstr "ismeretlen" #: ../gui/wxpython/core/gconsole.py:679 msgid "Please note that the data are left in inconsistent state and may be corrupted" @@ -3815,11 +3818,11 @@ #: ../gui/wxpython/core/gconsole.py:681 msgid "Command aborted" -msgstr "" +msgstr "Parancs megszakítva" #: ../gui/wxpython/core/gconsole.py:683 ../gui/wxpython/gmodeler/frame.py:315 msgid "Command finished" -msgstr "" +msgstr "Parancs befejezve" #: ../gui/wxpython/core/gconsole.py:759 #, python-format @@ -4328,7 +4331,7 @@ #: ../gui/wxpython/gui_core/forms.py:578 #: ../gui/wxpython/mapswipe/dialogs.py:193 msgid "Close" -msgstr "" +msgstr "Lezárás" #: ../gui/wxpython/menustrings.py:14 #: ../gui/wxpython/image2target/ii2t_menustrings.py:15 @@ -5173,7 +5176,7 @@ #: ../gui/wxpython/image2target/ii2t_menustrings.py:1169 #: ../gui/wxpython/gui_core/forms.py:628 msgid "Copy" -msgstr "" +msgstr "Másolás" #: ../gui/wxpython/menustrings.py:169 ../gui/wxpython/menustrings.py:1186 #: ../gui/wxpython/image2target/ii2t_menustrings.py:169 @@ -10202,7 +10205,7 @@ #: ../gui/wxpython/image2target/ii2t_menustrings.py:1034 #: ../gui/wxpython/gui_core/ghelp.py:60 msgid "About GRASS GIS" -msgstr "" +msgstr "GRASS GIS névjegy" #: ../gui/wxpython/menustrings.py:1052 #: ../gui/wxpython/image2target/ii2t_menustrings.py:1037 @@ -10228,7 +10231,7 @@ #: ../gui/wxpython/image2target/ii2t_menustrings.py:1978 #: ../gui/wxpython/gmodeler/frame.py:521 msgid "Save model" -msgstr "" +msgstr "Modell mentés" #: ../gui/wxpython/menustrings.py:2009 #: ../gui/wxpython/image2target/ii2t_menustrings.py:1980 @@ -10949,7 +10952,7 @@ #: ../gui/wxpython/vdigit/toolbars.py:108 msgid "Select area/boundary/centroid tool" -msgstr "" +msgstr "Válassza a terület/határ/centrális eszközt" #: ../gui/wxpython/vdigit/toolbars.py:134 msgid "Digitize new point" @@ -11057,7 +11060,7 @@ #: ../gui/wxpython/vdigit/toolbars.py:181 msgid "Additional tools (copy, flip, connect, etc.)" -msgstr "" +msgstr "További eszközök (másol, tükröz, összekapcsol, stb.)" #: ../gui/wxpython/vdigit/toolbars.py:186 msgid "Undo previous changes" @@ -11077,7 +11080,7 @@ #: ../gui/wxpython/vdigit/toolbars.py:561 msgid "Connect selected lines/boundaries" -msgstr "" +msgstr "Szelektált vonalak/határok összekapcsolása" #: ../gui/wxpython/vdigit/toolbars.py:563 msgid "Copy categories" @@ -11085,7 +11088,7 @@ #: ../gui/wxpython/vdigit/toolbars.py:565 msgid "Copy features from (background) vector map" -msgstr "" +msgstr "Elemek másolása a (háttér) vektor térképből" #: ../gui/wxpython/vdigit/toolbars.py:567 msgid "Copy attributes" @@ -11097,7 +11100,7 @@ #: ../gui/wxpython/vdigit/toolbars.py:571 msgid "Flip selected lines/boundaries" -msgstr "" +msgstr "Szelektált vonalak/határok tükrözése" #: ../gui/wxpython/vdigit/toolbars.py:573 msgid "Merge selected lines/boundaries" @@ -11113,7 +11116,7 @@ #: ../gui/wxpython/vdigit/toolbars.py:579 msgid "Query features" -msgstr "" +msgstr "Elemek lekérdezése" #: ../gui/wxpython/vdigit/toolbars.py:581 msgid "Z bulk-labeling of 3D lines" @@ -11121,11 +11124,11 @@ #: ../gui/wxpython/vdigit/toolbars.py:603 ../gui/wxpython/vdigit/wxdigit.py:69 msgid "No vector map open for editing." -msgstr "" +msgstr "Nincs szerkesztésre megnyitott vektortérkép." #: ../gui/wxpython/vdigit/toolbars.py:608 msgid "Select background vector map" -msgstr "" +msgstr "Válaszon háttér vektortérképet" #: ../gui/wxpython/vdigit/toolbars.py:768 msgid "Vector map is not 3D. Operation canceled." @@ -11226,7 +11229,7 @@ #: ../gui/wxpython/animation/dialogs.py:1858 #: ../gui/wxpython/gmodeler/preferences.py:55 msgid "General" -msgstr "" +msgstr "Általános" #: ../gui/wxpython/vdigit/preferences.py:163 ../gui/wxpython/nviz/tools.py:1575 #: ../gui/wxpython/nviz/tools.py:1789 ../gui/wxpython/gmodeler/frame.py:1568 @@ -11984,7 +11987,7 @@ #: ../gui/wxpython/animation/dialogs.py:1868 #: ../gui/wxpython/web_services/widgets.py:319 msgid "Background color:" -msgstr "" +msgstr "Háttér szín:" #: ../gui/wxpython/nviz/tools.py:511 msgid "Press 'Record' button and start changing the view. It is recommended to use fly-through mode (Map Display toolbar) to achieve smooth motion." @@ -12032,7 +12035,7 @@ #: ../gui/wxpython/nviz/tools.py:633 ../gui/wxpython/animation/dialogs.py:1191 msgid "File prefix:" -msgstr "" +msgstr "Fájl előtag:" #: ../gui/wxpython/nviz/tools.py:639 msgid "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..." @@ -12759,15 +12762,15 @@ #: ../gui/wxpython/gui_core/forms.py:613 msgid "Run the command (Ctrl+R)" -msgstr "" +msgstr "Parancs futtatás (Ctrl+R)" #: ../gui/wxpython/gui_core/forms.py:641 msgid "Show manual page of the command (Ctrl+H)" -msgstr "" +msgstr "Parancs kézikönyv oldal megjelenítése (Ctrl+H)" #: ../gui/wxpython/gui_core/forms.py:680 msgid "Add created map(s) into layer tree" -msgstr "" +msgstr "Létrehozott térkép hozzáadása a réteg fához" #: ../gui/wxpython/gui_core/forms.py:710 msgid "Close dialog when command is successfully finished. Change this settings in Preferences dialog ('Command' tab)." @@ -12862,7 +12865,7 @@ #: ../gui/wxpython/gui_core/forms.py:1925 #: ../gui/wxpython/gui_core/gselect.py:1430 msgid "Directory" -msgstr "" +msgstr "Könyvtár" #: ../gui/wxpython/gui_core/forms.py:2290 ../gui/wxpython/gmodeler/frame.py:174 msgid "Command output" @@ -12925,12 +12928,12 @@ #: ../gui/wxpython/gui_core/pyedit.py:382 #: ../gui/wxpython/gmodeler/frame.py:2061 msgid "Python script (*.py)|*.py" -msgstr "" +msgstr "Python szkript (*.py)|*.py" #: ../gui/wxpython/gui_core/pyedit.py:338 #: ../gui/wxpython/gmodeler/frame.py:2081 msgid "Save file" -msgstr "" +msgstr "Fájl mentés" #: ../gui/wxpython/gui_core/pyedit.py:380 msgid "Open file" @@ -13024,31 +13027,31 @@ #: ../gui/wxpython/gui_core/ghelp.py:84 msgid "License" -msgstr "" +msgstr "Lincenc" #: ../gui/wxpython/gui_core/ghelp.py:85 msgid "Citation" -msgstr "" +msgstr "Idézet" #: ../gui/wxpython/gui_core/ghelp.py:86 msgid "Authors" -msgstr "" +msgstr "Szerzők" #: ../gui/wxpython/gui_core/ghelp.py:87 msgid "Contributors" -msgstr "" +msgstr "Hozzájárulók" #: ../gui/wxpython/gui_core/ghelp.py:88 msgid "Extra contributors" -msgstr "" +msgstr "Extra hozzájárulók" #: ../gui/wxpython/gui_core/ghelp.py:89 msgid "Translators" -msgstr "" +msgstr "Fordítók" #: ../gui/wxpython/gui_core/ghelp.py:90 msgid "Translation status" -msgstr "" +msgstr "Fordítás státusz" #: ../gui/wxpython/gui_core/ghelp.py:125 ../gui/wxpython/gui_core/ghelp.py:925 #: ../gui/wxpython/lmgr/frame.py:88 ../gui/wxpython/lmgr/frame.py:1222 @@ -13057,11 +13060,11 @@ #: ../gui/wxpython/gui_core/ghelp.py:138 ../gui/wxpython/lmgr/frame.py:1247 msgid "unknown version" -msgstr "" +msgstr "ismeretlen verzió" #: ../gui/wxpython/gui_core/ghelp.py:154 msgid "Official GRASS site:" -msgstr "" +msgstr "Hivatalos GRASS oldal:" #: ../gui/wxpython/gui_core/ghelp.py:165 msgid "Code Revision" @@ -13073,14 +13076,14 @@ #: ../gui/wxpython/gui_core/ghelp.py:230 ../gui/wxpython/gui_core/ghelp.py:487 msgid "Language" -msgstr "" +msgstr "Nyelv" #: ../gui/wxpython/gui_core/ghelp.py:259 ../gui/wxpython/gui_core/ghelp.py:284 #: ../gui/wxpython/gui_core/ghelp.py:334 ../gui/wxpython/gui_core/ghelp.py:397 #: ../gui/wxpython/gui_core/ghelp.py:471 ../gui/wxpython/gui_core/ghelp.py:634 #, python-format msgid "%s file missing" -msgstr "" +msgstr "%s fájl hiányzik" #: ../gui/wxpython/gui_core/ghelp.py:307 #, python-brace-format @@ -13101,16 +13104,16 @@ #: ../gui/wxpython/gmodeler/frame.py:1779 #: ../gui/wxpython/web_services/widgets.py:936 msgid "Name" -msgstr "" +msgstr "Név" #: ../gui/wxpython/gui_core/ghelp.py:403 ../gui/wxpython/gui_core/ghelp.py:405 #: ../gui/wxpython/gui_core/ghelp.py:483 msgid "E-mail" -msgstr "" +msgstr "E-mail" #: ../gui/wxpython/gui_core/ghelp.py:403 ../gui/wxpython/gui_core/ghelp.py:405 msgid "Country" -msgstr "" +msgstr "Ország" #: ../gui/wxpython/gui_core/ghelp.py:405 msgid "OSGeo_ID" @@ -13123,7 +13126,7 @@ #: ../gui/wxpython/gui_core/ghelp.py:538 #, python-format msgid " %d translated" -msgstr "" +msgstr "%d lefordítva" #: ../gui/wxpython/gui_core/ghelp.py:542 ../gui/wxpython/gui_core/ghelp.py:568 #, python-format @@ -13133,25 +13136,25 @@ #: ../gui/wxpython/gui_core/ghelp.py:546 ../gui/wxpython/gui_core/ghelp.py:577 #, python-format msgid " %d untranslated" -msgstr "" +msgstr "%d nincs lefordítva" #: ../gui/wxpython/gui_core/ghelp.py:559 #, python-format msgid "%d translated" -msgstr "" +msgstr "%d lefordítva" #: ../gui/wxpython/gui_core/ghelp.py:631 #, python-format msgid "File <%s> not found" -msgstr "" +msgstr "<%s> fájlt nem találom" #: ../gui/wxpython/gui_core/ghelp.py:804 msgid "&Next" -msgstr "" +msgstr "Következő" #: ../gui/wxpython/gui_core/ghelp.py:807 msgid "&Previous" -msgstr "" +msgstr "Előző" #: ../gui/wxpython/gui_core/vselect.py:49 msgid "category" @@ -13402,7 +13405,7 @@ #: ../gui/wxpython/gui_core/gselect.py:1600 #: ../gui/wxpython/animation/dialogs.py:1200 msgid "Directory:" -msgstr "" +msgstr "Könyvtár:" #: ../gui/wxpython/gui_core/gselect.py:1518 #: ../gui/wxpython/gui_core/gselect.py:1601 @@ -13421,7 +13424,7 @@ #: ../gui/wxpython/vnet/dialogs.py:1648 #: ../gui/wxpython/gmodeler/preferences.py:707 msgid "Name:" -msgstr "" +msgstr "Név:" #: ../gui/wxpython/gui_core/gselect.py:1565 msgid "Choose file" @@ -13673,7 +13676,7 @@ #: ../gui/wxpython/gui_core/preferences.py:800 #: ../gui/wxpython/animation/dialogs.py:1065 msgid "Set font" -msgstr "" +msgstr "Betűkészlet beállítás" #: ../gui/wxpython/gui_core/preferences.py:535 msgid "Language settings" @@ -13859,7 +13862,7 @@ #: ../gui/wxpython/gui_core/preferences.py:1655 #: ../gui/wxpython/gui_core/dialogs.py:354 msgid "Key column:" -msgstr "" +msgstr "Kulcs oszlop" #: ../gui/wxpython/gui_core/preferences.py:1689 #: ../gui/wxpython/mapdisp/statusbar.py:826 @@ -14010,7 +14013,7 @@ #: ../gui/wxpython/gui_core/dialogs.py:474 #, python-format msgid "Vector map <%s> already exists in the current mapset. Do you want to overwrite it?" -msgstr "" +msgstr "A <%s> térkép már létezik az aktuális térképcsoportban. Felül akarja írni?" #: ../gui/wxpython/gui_core/dialogs.py:564 msgid "Load region:" @@ -14026,7 +14029,7 @@ #: ../gui/wxpython/gui_core/dialogs.py:638 msgid "Create or edit imagery groups" -msgstr "" +msgstr "Képcsoport létrehozás vagy szerkesztés" #: ../gui/wxpython/gui_core/dialogs.py:672 msgid "Apply changes to selected group and close dialog" @@ -14143,7 +14146,7 @@ #: ../gui/wxpython/gui_core/dialogs.py:1465 msgid "Map type:" -msgstr "" +msgstr "Térkép típus:" #: ../gui/wxpython/gui_core/dialogs.py:1480 msgid "Select toggle" @@ -14151,11 +14154,11 @@ #: ../gui/wxpython/gui_core/dialogs.py:1487 msgid "Mapset:" -msgstr "" +msgstr "Térképcsoport:" #: ../gui/wxpython/gui_core/dialogs.py:1581 msgid "Invert selection" -msgstr "" +msgstr "Kiválasztás megfordítása" #: ../gui/wxpython/gui_core/dialogs.py:1724 #, python-format @@ -14164,7 +14167,7 @@ #: ../gui/wxpython/gui_core/dialogs.py:1751 msgid "Set Map Layer Opacity" -msgstr "" +msgstr "Térkép réteg átlátszóság" #: ../gui/wxpython/gui_core/dialogs.py:1782 #: ../gui/wxpython/psmap/dialogs.py:6392 ../gui/wxpython/psmap/dialogs.py:6419 @@ -15478,7 +15481,7 @@ #: ../gui/wxpython/mapswipe/toolbars.py:34 #: ../gui/wxpython/mapswipe/dialogs.py:44 msgid "Select raster maps" -msgstr "" +msgstr "Válasszon rasztertérképeket" #: ../gui/wxpython/mapswipe/toolbars.py:37 #: ../gui/wxpython/mapdisp/toolbars.py:29 @@ -15542,15 +15545,15 @@ #: ../gui/wxpython/mapswipe/dialogs.py:130 msgid "Name of top/left raster map:" -msgstr "" +msgstr "Bal-felső rasztertérkép neve:" #: ../gui/wxpython/mapswipe/dialogs.py:139 msgid "Name of bottom/right raster map:" -msgstr "" +msgstr "Jobb-alsó rasztertérkép neve:" #: ../gui/wxpython/mapswipe/dialogs.py:185 msgid "Switch to advanced mode" -msgstr "" +msgstr "Váltás haladó módra" #: ../gui/wxpython/mapswipe/dialogs.py:186 msgid "Cancel" @@ -15558,7 +15561,7 @@ #: ../gui/wxpython/mapswipe/dialogs.py:192 msgid "Switch to simple mode" -msgstr "" +msgstr "Váltás egyszerű módra" #: ../gui/wxpython/mapswipe/dialogs.py:217 msgid "Name of the first map is missing." @@ -15598,7 +15601,7 @@ #: ../gui/wxpython/animation/data.py:66 msgid "No animation name selected." -msgstr "" +msgstr "Nem választott animáció nevet." #: ../gui/wxpython/animation/data.py:132 msgid "No workspace file selected." @@ -15612,7 +15615,7 @@ #: ../gui/wxpython/animation/data.py:144 #, python-format msgid "Animation %d" -msgstr "" +msgstr "Animáció %d" #: ../gui/wxpython/animation/nviztask.py:45 ../gui/wxpython/lmgr/frame.py:1432 #, python-format @@ -15669,7 +15672,7 @@ #: ../gui/wxpython/animation/toolbars.py:60 #: ../gui/wxpython/animation/dialogs.py:911 msgid "Export animation" -msgstr "" +msgstr "Animáció export" #: ../gui/wxpython/animation/toolbars.py:68 msgid "Add space-time dataset or series of map layers" @@ -15689,7 +15692,7 @@ #: ../gui/wxpython/animation/frame.py:284 msgid "Loading data" -msgstr "" +msgstr "Adatok betöltése" #: ../gui/wxpython/animation/frame.py:292 #, python-brace-format @@ -15709,7 +15712,7 @@ #: ../gui/wxpython/animation/provider.py:418 msgid "Rendering map layers" -msgstr "" +msgstr "Térkép rétegek rajzolása" #: ../gui/wxpython/animation/provider.py:531 msgid "Overlaying map layers" @@ -15727,11 +15730,11 @@ #: ../gui/wxpython/animation/dialogs.py:57 msgid "Adjust speed of animation" -msgstr "" +msgstr "Animáció sebesség módosítása" #: ../gui/wxpython/animation/dialogs.py:104 msgid "Simple mode" -msgstr "" +msgstr "Egyszerű mód" #: ../gui/wxpython/animation/dialogs.py:109 msgid "Frame duration:" @@ -15740,7 +15743,7 @@ #: ../gui/wxpython/animation/dialogs.py:110 #: ../gui/wxpython/animation/dialogs.py:151 msgid "ms" -msgstr "" +msgstr "ms" #: ../gui/wxpython/animation/dialogs.py:143 msgid "Temporal mode" @@ -15788,7 +15791,7 @@ #: ../gui/wxpython/animation/dialogs.py:348 msgid "Advanced" -msgstr "" +msgstr "Haladó" #: ../gui/wxpython/animation/dialogs.py:379 msgid "top left" @@ -15827,7 +15830,7 @@ #: ../gui/wxpython/animation/dialogs.py:479 #: ../gui/wxpython/lmgr/layertree.py:111 msgid "Set options" -msgstr "" +msgstr "Beálítások" #: ../gui/wxpython/animation/dialogs.py:500 msgid "3D view parameters" @@ -15851,11 +15854,11 @@ #: ../gui/wxpython/animation/dialogs.py:562 msgid "Start region:" -msgstr "" +msgstr "Kezdő régió:" #: ../gui/wxpython/animation/dialogs.py:572 msgid "End region:" -msgstr "" +msgstr "Záró régió:" #: ../gui/wxpython/animation/dialogs.py:578 msgid "Zoom value:" @@ -15883,7 +15886,7 @@ #: ../gui/wxpython/animation/dialogs.py:723 msgid "Region information is not complete" -msgstr "" +msgstr "A régió információ nem teljes" #: ../gui/wxpython/animation/dialogs.py:757 msgid "Add, edit or remove animations" @@ -15900,12 +15903,12 @@ #: ../gui/wxpython/animation/dialogs.py:841 #, python-format msgid "Maximum number of animations is %d." -msgstr "" +msgstr "Maximális animáció szám %d." #: ../gui/wxpython/animation/dialogs.py:891 #: ../gui/wxpython/animation/controller.py:262 msgid "More animations are using one window. Please select different window for each animation." -msgstr "" +msgstr "Több animáció használ egy ablakot. Kérjük válasszon más ablakot minden animációhoz." #: ../gui/wxpython/animation/dialogs.py:992 msgid "Add time stamp" @@ -15961,7 +15964,7 @@ #: ../gui/wxpython/animation/dialogs.py:1166 msgid "Export to:" -msgstr "" +msgstr "Exportálás ebbe:" #: ../gui/wxpython/animation/dialogs.py:1193 msgid "animation_" @@ -15991,6 +15994,9 @@ "Please install it first and make sure\n" "it's in the PATH variable." msgstr "" +"Az 'ffmpeg'-t nem telepítették.\n" +"Telepítse előbb egy biztosítsa,\n" +"hogy a PATH változóban szerepel." #: ../gui/wxpython/animation/dialogs.py:1291 msgid "AVI file:" @@ -16002,7 +16008,7 @@ #: ../gui/wxpython/animation/dialogs.py:1303 msgid "Additional options:" -msgstr "" +msgstr "További beállítások" #: ../gui/wxpython/animation/dialogs.py:1307 msgid "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. Options depend on ffmpeg version." @@ -16016,25 +16022,25 @@ #: ../gui/wxpython/animation/dialogs.py:1476 #, python-format msgid "File %s not found." -msgstr "" +msgstr "%s fájlt nem találom." #: ../gui/wxpython/animation/dialogs.py:1480 msgid "Decoration image file is missing." -msgstr "" +msgstr "Dekoráció kép fájl hiányzik." #: ../gui/wxpython/animation/dialogs.py:1489 #, python-format msgid "Directory %s not found." -msgstr "" +msgstr "%s könyvtárak nem találom." #: ../gui/wxpython/animation/dialogs.py:1493 msgid "Export directory is missing." -msgstr "" +msgstr "Export könyvtár hiányzik." #: ../gui/wxpython/animation/dialogs.py:1497 #: ../gui/wxpython/animation/dialogs.py:1501 msgid "Export file is missing." -msgstr "" +msgstr "Export fájl hiányzik." #: ../gui/wxpython/animation/dialogs.py:1539 msgid "Time stamp" @@ -16078,11 +16084,11 @@ #: ../gui/wxpython/animation/dialogs.py:1796 msgid "Please select maps or dataset first." -msgstr "" +msgstr "Kérjük először válasszon térképeket vagy adatállományt." #: ../gui/wxpython/animation/dialogs.py:1825 msgid "Animation Tool settings" -msgstr "" +msgstr "Animáció eszköz beállítások" #: ../gui/wxpython/animation/dialogs.py:1889 msgid "Number of parallel processes:" @@ -16177,7 +16183,7 @@ #: ../gui/wxpython/animation/controller.py:234 #, python-format msgid "Maximum number of animations is %s." -msgstr "" +msgstr "Az animációk maximális száma %s." #: ../gui/wxpython/animation/controller.py:443 msgid "Failed to display legend." @@ -16189,7 +16195,7 @@ #: ../gui/wxpython/animation/controller.py:505 msgid "No animation to export." -msgstr "" +msgstr "Nincs exportálható animáció." #: ../gui/wxpython/animation/controller.py:542 msgid "Preparing export, please wait..." @@ -16655,7 +16661,7 @@ #: ../gui/wxpython/lmgr/frame.py:601 ../gui/wxpython/gmodeler/frame.py:485 #: ../gui/wxpython/gmodeler/frame.py:545 msgid "GRASS Model File (*.gxm)|*.gxm" -msgstr "" +msgstr "GRASS Model fájl (*.gxm)|*.gxm" #: ../gui/wxpython/lmgr/frame.py:664 ../gui/wxpython/lmgr/frame.py:2563 msgid "Do you want to save changes in the workspace?" @@ -17855,7 +17861,7 @@ #: ../gui/wxpython/vnet/vnet_core.py:276 ../gui/wxpython/vnet/vnet_core.py:353 #, python-format msgid "Vector map %s already exists. Do you want to overwrite it?" -msgstr "" +msgstr "<%s> vektortérkép már létezik. Felül akarja írni?" #: ../gui/wxpython/vnet/vnet_core.py:279 ../gui/wxpython/vnet/vnet_core.py:356 msgid "Overwrite vector map" @@ -17962,7 +17968,7 @@ #: ../gui/wxpython/vnet/toolbars.py:129 msgid "Show analysis result" -msgstr "" +msgstr "Elemzés eredmény megjelenítése" #: ../gui/wxpython/vnet/toolbars.py:132 msgid "Save temporary result" @@ -17974,7 +17980,7 @@ #: ../gui/wxpython/vnet/toolbars.py:205 msgid "Availiable analyses" -msgstr "" +msgstr "Elérhető elemzések" #: ../gui/wxpython/vnet/widgets.py:390 msgid "Invalid value inserted. Operation canceled." @@ -19160,7 +19166,7 @@ #: ../gui/wxpython/gmodeler/model.py:69 msgid "Script generated by wxGUI Graphical Modeler." -msgstr "" +msgstr "wxGUI grafikus modellerrel generált szkript." #: ../gui/wxpython/gmodeler/model.py:495 ../gui/wxpython/gmodeler/model.py:558 #, python-format @@ -19177,7 +19183,7 @@ #: ../gui/wxpython/gmodeler/model.py:620 ../gui/wxpython/gmodeler/frame.py:665 msgid "Validating model..." -msgstr "" +msgstr "Modell ellenőrzése..." #: ../gui/wxpython/gmodeler/model.py:628 #, python-format @@ -19185,7 +19191,7 @@ "Model is not valid. Do you want to run the model anyway?\n" "\n" "%s" -msgstr "" +msgstr "A modell hibás. Mindenképpen futtatni akarja a modellt?" #: ../gui/wxpython/gmodeler/model.py:631 msgid "Run model?" @@ -19291,16 +19297,16 @@ #: ../gui/wxpython/gmodeler/frame.py:415 msgid "No intermediate data to delete." -msgstr "" +msgstr "Nincsenek törlendő közbenső adatok." #: ../gui/wxpython/gmodeler/frame.py:421 #, python-format msgid "Do you want to permanently delete data?%s" -msgstr "" +msgstr "Véglegesen törölni akarja az adatokat? %s" #: ../gui/wxpython/gmodeler/frame.py:423 msgid "Delete intermediate data?" -msgstr "" +msgstr "Közbenső adatok törlése?" #: ../gui/wxpython/gmodeler/frame.py:443 ../gui/wxpython/gmodeler/frame.py:593 msgid "Current model is not empty. Do you want to store current settings to model file?" @@ -19308,11 +19314,11 @@ #: ../gui/wxpython/gmodeler/frame.py:446 ../gui/wxpython/gmodeler/frame.py:596 msgid "Create new model?" -msgstr "" +msgstr "Új modell létrehozása?" #: ../gui/wxpython/gmodeler/frame.py:483 msgid "Choose model file" -msgstr "" +msgstr "Válasszon modell fájlt" #: ../gui/wxpython/gmodeler/frame.py:506 #, python-format @@ -19322,7 +19328,7 @@ #: ../gui/wxpython/gmodeler/frame.py:518 ../gui/wxpython/gmodeler/frame.py:562 #, python-format msgid "Model file <%s> already exists. Do you want to overwrite this file?" -msgstr "" +msgstr "<%s> modell fájl már létezik. Felül akarja írni ezt a fájlt?" #: ../gui/wxpython/gmodeler/frame.py:530 ../gui/wxpython/gmodeler/frame.py:580 #, python-format @@ -19331,11 +19337,11 @@ #: ../gui/wxpython/gmodeler/frame.py:543 msgid "Choose file to save current model" -msgstr "" +msgstr "Válasszon fájlt az aktuális modell mentéséhez" #: ../gui/wxpython/gmodeler/frame.py:662 msgid "Model is empty. Nothing to validate." -msgstr "" +msgstr "A modell üres. Nincs mit ellenőrizni." #: ../gui/wxpython/gmodeler/frame.py:672 #, python-format @@ -19344,15 +19350,18 @@ "\n" "%s" msgstr "" +"A modell hibás.\n" +"\n" +"%s" #: ../gui/wxpython/gmodeler/frame.py:676 msgid "Model is valid." -msgstr "" +msgstr "A modell hibátlan." #: ../gui/wxpython/gmodeler/frame.py:736 ../gui/wxpython/gmodeler/frame.py:743 #, python-format msgid "Model exported to <%s>" -msgstr "" +msgstr "A modellt exportáltam <%s>" #: ../gui/wxpython/gmodeler/frame.py:885 ../gui/wxpython/gmodeler/frame.py:1626 #: ../gui/wxpython/gmodeler/dialogs.py:242 @@ -19365,7 +19374,7 @@ #: ../gui/wxpython/gmodeler/frame.py:932 msgid "wxGUI Graphical Modeler" -msgstr "" +msgstr "wxGUI grafikus modellező" #: ../gui/wxpython/gmodeler/frame.py:1051 #, python-format @@ -19378,7 +19387,7 @@ #: ../gui/wxpython/gmodeler/frame.py:1063 msgid "Please wait, loading model..." -msgstr "" +msgstr "Kérem várjon, modell betöltése..." #: ../gui/wxpython/gmodeler/frame.py:1129 msgid "Writing current settings to model file failed." @@ -19442,15 +19451,15 @@ #: ../gui/wxpython/gmodeler/frame.py:1746 msgid "string" -msgstr "" +msgstr "szöveglánc" #: ../gui/wxpython/gmodeler/frame.py:1749 msgid "region" -msgstr "" +msgstr "régió" #: ../gui/wxpython/gmodeler/frame.py:1750 msgid "mapset" -msgstr "" +msgstr "térképcsoport" #: ../gui/wxpython/gmodeler/frame.py:1752 msgid "dir" @@ -19490,7 +19499,7 @@ #: ../gui/wxpython/gmodeler/frame.py:1985 msgid "Run python script" -msgstr "" +msgstr "Python szkript futtatása" #: ../gui/wxpython/gmodeler/frame.py:1988 msgid "Save python script to file" @@ -19557,7 +19566,7 @@ #: ../gui/wxpython/gmodeler/preferences.py:417 msgid "Loop" -msgstr "" +msgstr "Ciklus" #: ../gui/wxpython/gmodeler/preferences.py:529 msgid "Comment" @@ -19598,7 +19607,7 @@ #: ../gui/wxpython/gmodeler/dialogs.py:197 msgid "Label and comment" -msgstr "" +msgstr "Címke és komment" #: ../gui/wxpython/gmodeler/dialogs.py:295 msgid "" @@ -19656,7 +19665,7 @@ #: ../gui/wxpython/gmodeler/dialogs.py:490 msgid "Condition" -msgstr "" +msgstr "Feltétel" #: ../gui/wxpython/gmodeler/dialogs.py:518 msgid "Loop properties" @@ -19864,11 +19873,11 @@ #: ../gui/wxpython/mapdisp/toolbars.py:73 msgid "Click mouse to zoom" -msgstr "" +msgstr "Kattintson az egérrel a nagyításhoz" #: ../gui/wxpython/mapdisp/toolbars.py:75 msgid "Click mouse to unzoom" -msgstr "" +msgstr "Kattintson az egérrel a kicsinyítéshez" #: ../gui/wxpython/mapdisp/toolbars.py:110 msgid "3D view mode not available" @@ -19882,7 +19891,7 @@ #: ../gui/wxpython/mapdisp/toolbars.py:122 msgid "Vector digitizer not available" -msgstr "" +msgstr "Vektor digitalizáló nem érhető el" #: ../gui/wxpython/mapdisp/toolbars.py:126 msgid "Note that the wxGUI's vector digitizer is disabled in this installation. Please keep an eye out for updated versions of GRASS. In the meantime you can use \"v.edit\" for non-interactive editing from the Develop vector map menu." @@ -20076,7 +20085,7 @@ #: ../gui/wxpython/mapdisp/statusbar.py:1026 #: ../gui/wxpython/mapdisp/statusbar.py:1127 msgid "Error in projection (check the settings)" -msgstr "" +msgstr "Hiba a vetületben (ellenőrizze a beállításokat)" #: ../gui/wxpython/mapdisp/statusbar.py:828 msgid "Use defined projection" diff -Nru grass-7.8.0~rc1/locale/po/grasswxpy_tr.po grass-7.8.0/locale/po/grasswxpy_tr.po --- grass-7.8.0~rc1/locale/po/grasswxpy_tr.po 2019-08-11 07:55:01.000000000 +0000 +++ grass-7.8.0/locale/po/grasswxpy_tr.po 2019-09-06 19:20:17.000000000 +0000 @@ -1328,7 +1328,7 @@ #: ../gui/wxpython/animation/dialogs.py:747 #: ../gui/wxpython/animation/controller.py:295 msgid "Invalid input" -msgstr "" +msgstr "Geçersiz girdi" #: ../gui/wxpython/wxplot/dialogs.py:665 ../gui/wxpython/wxplot/base.py:519 #: ../gui/wxpython/wxplot/base.py:586 @@ -13405,7 +13405,7 @@ #: ../gui/wxpython/vnet/dialogs.py:1648 #: ../gui/wxpython/gmodeler/preferences.py:707 msgid "Name:" -msgstr "" +msgstr "Adı:" #: ../gui/wxpython/gui_core/gselect.py:1565 msgid "Choose file" @@ -15572,7 +15572,7 @@ #: ../gui/wxpython/animation/data.py:144 #, python-format msgid "Animation %d" -msgstr "" +msgstr "Animasyon %d" #: ../gui/wxpython/animation/nviztask.py:45 ../gui/wxpython/lmgr/frame.py:1432 #, python-format @@ -15693,7 +15693,7 @@ #: ../gui/wxpython/animation/dialogs.py:104 msgid "Simple mode" -msgstr "" +msgstr "Basit mod" #: ../gui/wxpython/animation/dialogs.py:109 msgid "Frame duration:" @@ -15702,7 +15702,7 @@ #: ../gui/wxpython/animation/dialogs.py:110 #: ../gui/wxpython/animation/dialogs.py:151 msgid "ms" -msgstr "" +msgstr "ms" #: ../gui/wxpython/animation/dialogs.py:143 msgid "Temporal mode" @@ -15710,7 +15710,7 @@ #: ../gui/wxpython/animation/dialogs.py:148 msgid "Time unit:" -msgstr "" +msgstr "Zaman birimi:" #: ../gui/wxpython/animation/dialogs.py:150 msgid "Duration of time unit:" @@ -15718,27 +15718,27 @@ #: ../gui/wxpython/animation/dialogs.py:222 msgid "year" -msgstr "" +msgstr "yıl" #: ../gui/wxpython/animation/dialogs.py:223 msgid "month" -msgstr "" +msgstr "ay" #: ../gui/wxpython/animation/dialogs.py:224 msgid "day" -msgstr "" +msgstr "gün" #: ../gui/wxpython/animation/dialogs.py:225 msgid "hour" -msgstr "" +msgstr "saat" #: ../gui/wxpython/animation/dialogs.py:226 msgid "minute" -msgstr "" +msgstr "dakika" #: ../gui/wxpython/animation/dialogs.py:227 msgid "second" -msgstr "" +msgstr "saniye" #: ../gui/wxpython/animation/dialogs.py:292 msgid "Animation speed is too high." @@ -16139,7 +16139,7 @@ #: ../gui/wxpython/animation/controller.py:234 #, python-format msgid "Maximum number of animations is %s." -msgstr "" +msgstr "En büyük animasyon sayısı: %s." #: ../gui/wxpython/animation/controller.py:443 msgid "Failed to display legend." diff -Nru grass-7.8.0~rc1/raster/r.null/r.null.html grass-7.8.0/raster/r.null/r.null.html --- grass-7.8.0~rc1/raster/r.null/r.null.html 2019-05-18 15:50:05.000000000 +0000 +++ grass-7.8.0/raster/r.null/r.null.html 2019-09-04 13:16:01.000000000 +0000 @@ -4,7 +4,7 @@ bitmap file. The intended usage is to update maps that do not have a NULL-value bitmap file (i.e. to indicate for each pixel if zero is a valid value or is to be considered as NULL, i.e. no data value). The module does -not work with reclassified maps. +not work with reclassified or external maps.

The design is flexible. Ranges of values can be set to NULL and/or the NULL @@ -45,6 +45,15 @@ Warning: such raster maps can then only be opened with GRASS GIS 7.2.0 or later. NULL file compression can be managed with r.null -z. +

External maps

+From the r.external documentation: GDAL-linked +(r.external) maps do not have or use a NULL bitmap, hence r.null cannot +manipulate them directly. Here NULL cells are those whose value matches +the value reported by the GDALGetRasterNoDataValue() function. To apply the +GDAL-linked the user need to either create a MASK (e.g. with r.mask) and +then "apply" it using e.g. r.resample, or use r.mapcalc to create a copy +with the appropriate categories changed to NULL (if() condition). +

EXAMPLES

Set specific values of a classified map to NULL:
diff -Nru grass-7.8.0~rc1/REQUIREMENTS.html grass-7.8.0/REQUIREMENTS.html
--- grass-7.8.0~rc1/REQUIREMENTS.html	2019-07-28 20:17:50.000000000 +0000
+++ grass-7.8.0/REQUIREMENTS.html	2019-09-06 20:46:18.000000000 +0000
@@ -210,7 +210,9 @@
 
  • git (git for g.extension)
    https://git-scm.com/
  • - + +
  • Subversion (svn in g.extension to fetch code selectively from grass-addons on GitHub)
    +https://subversion.apache.org/
    diff -Nru grass-7.8.0~rc1/scripts/m.proj/m.proj.py grass-7.8.0/scripts/m.proj/m.proj.py --- grass-7.8.0~rc1/scripts/m.proj/m.proj.py 2019-08-06 18:48:31.000000000 +0000 +++ grass-7.8.0/scripts/m.proj/m.proj.py 2019-09-04 13:16:01.000000000 +0000 @@ -10,7 +10,7 @@ PURPOSE: cs2cs reprojection frontend for a list of coordinates. Replacement for m.proj2 from GRASS 5 -COPYRIGHT: (c) 2006-2014 Hamish Bowman, and the GRASS Development Team +COPYRIGHT: (c) 2006-2019 Hamish Bowman, and the GRASS Development Team This program is free software under the GNU General Public License (>=v2). Read the file COPYING that comes with GRASS for details. @@ -90,7 +90,13 @@ #% description: Include column names in output file #% guisection: Output #%end - +#%rules +#% required: coordinates, input +#% exclusive: coordinates, input +#% exclusive: proj_in, -i +#% exclusive: proj_out, -o +#% exclusive: -i, -o +#%end import sys import os @@ -139,25 +145,6 @@ "cs2cs program not found, install PROJ.4 first: \ http://proj.maptools.org")) - # check for overenthusiasm - if proj_in and ll_in: - gcore.fatal(_("Choose only one input parameter method")) - - if proj_out and ll_out: - gcore.fatal(_("Choose only one output parameter method")) - - if ll_in and ll_out: - gcore.fatal(_("Choose only one auto-projection parameter method")) - - if output and not gcore.overwrite() and os.path.exists(output): - gcore.fatal(_("Output file already exists")) - - if not coords and not input: - gcore.fatal(_("One of and must be given")) - if coords and input: - gcore.fatal(_( - "Options and are mutually exclusive")) - # parse field separator # FIXME: input_x,y needs to split on multiple whitespace between them if fs == ',': diff -Nru grass-7.8.0~rc1/scripts/v.db.droptable/v.db.droptable.py grass-7.8.0/scripts/v.db.droptable/v.db.droptable.py --- grass-7.8.0~rc1/scripts/v.db.droptable/v.db.droptable.py 2019-08-06 18:48:31.000000000 +0000 +++ grass-7.8.0/scripts/v.db.droptable/v.db.droptable.py 2019-09-04 13:16:01.000000000 +0000 @@ -46,6 +46,17 @@ table = options['table'] layer = options['layer'] + # We check for existence of the map in the current mapset before + # doing any other operation. + info = gscript.find_file(map, element='vector', mapset=".") + if not info['file']: + mapset = gscript.gisenv()["MAPSET"] + # Message is formulated in the way that it does not mislead + # in case where a map of the same name is in another mapset. + gscript.fatal(_("Vector map <{name}> not found" + " in the current mapset ({mapset})").format( + name=map, mapset=mapset)) + # do some paranoia tests as well: f = gscript.vector_layer_db(map, layer) diff -Nru grass-7.8.0~rc1/scripts/v.import/v.import.py grass-7.8.0/scripts/v.import/v.import.py --- grass-7.8.0~rc1/scripts/v.import/v.import.py 2019-08-06 18:48:31.000000000 +0000 +++ grass-7.8.0/scripts/v.import/v.import.py 2019-09-04 13:16:01.000000000 +0000 @@ -107,10 +107,13 @@ # initialize global vars TMPLOC = None SRCGISRC = None +TGTGISRC = None GISDBASE = None def cleanup(): + if TGTGISRC: + os.environ['GISRC'] = str(TGTGISRC) # remove temp location if TMPLOC: grass.try_rmdir(os.path.join(GISDBASE, TMPLOC)) @@ -119,7 +122,7 @@ def main(): - global TMPLOC, SRCGISRC, GISDBASE + global TMPLOC, SRCGISRC, TGTGISRC, GISDBASE overwrite = grass.overwrite() # list formats and exit @@ -188,7 +191,7 @@ tgtmapset = grassenv['MAPSET'] GISDBASE = grassenv['GISDBASE'] - tgtgisrc = os.environ['GISRC'] + TGTGISRC = os.environ['GISRC'] SRCGISRC = grass.tempfile() TMPLOC = 'temp_import_location_' + str(os.getpid()) @@ -228,7 +231,7 @@ if options['extent'] == 'region': # switch to target location - os.environ['GISRC'] = str(tgtgisrc) + os.environ['GISRC'] = str(TGTGISRC) # v.in.region in tgt vreg = 'vreg_' + str(os.getpid()) @@ -260,7 +263,7 @@ output = grass.list_grouped('vector')['PERMANENT'][0] # switch to target location - os.environ['GISRC'] = str(tgtgisrc) + os.environ['GISRC'] = str(TGTGISRC) # check if map exists if not grass.overwrite() and \ diff -Nru grass-7.8.0~rc1/temporal/temporalintro.html grass-7.8.0/temporal/temporalintro.html --- grass-7.8.0~rc1/temporal/temporalintro.html 2019-05-18 15:50:05.000000000 +0000 +++ grass-7.8.0/temporal/temporalintro.html 2019-09-04 13:16:10.000000000 +0000 @@ -243,23 +243,23 @@

    See also

      -
    • - Gebbert, S., Pebesma, E., 2014. TGRASS: A temporal GIS for field - based environmental modeling. Environmental Modelling & - Software 53, 1-12. (DOI) -
    • -
    • - Temporal - data processing (Wiki) -
    • -
    • - Vaclav Petras, Anna Petrasova, Helena Mitasova, Markus Neteler, +
    • Gebbert, S., Pebesma, E. 2014. TGRASS: A temporal GIS for field based environmental modeling. + Environmental Modelling & Software 53, 1-12 (DOI) + - preprint PDF
    • + +
    • Gebbert, S., Pebesma, E. 2017. The GRASS GIS temporal framework. International Journal of + Geographical Information Science 31, 1273-1292 (DOI)
    • + +
    • Gebbert, S., Leppelt, T., Pebesma, E., 2019. A topology based spatio-temporal map algebra for big data analysis. + Data 4, 86. (DOI)
    • + +
    • Temporal + data processing (Wiki)
    • + +
    • Vaclav Petras, Anna Petrasova, Helena Mitasova, Markus Neteler, FOSS4G 2014 workshop:
      Spatio-temporal - data handling and visualization in GRASS GIS -
    • -
    • - GEOSTAT 2012 - TGRASS Course -
    • + data handling and visualization in GRASS GIS + +
    • GEOSTAT 2012 GRASS Course
    diff -Nru grass-7.8.0~rc1/temporal/t.rast.algebra/t.rast.algebra.html grass-7.8.0/temporal/t.rast.algebra/t.rast.algebra.html --- grass-7.8.0~rc1/temporal/t.rast.algebra/t.rast.algebra.html 2019-05-18 15:50:05.000000000 +0000 +++ grass-7.8.0/temporal/t.rast.algebra/t.rast.algebra.html 2019-09-04 13:16:10.000000000 +0000 @@ -583,15 +583,27 @@

     # Ubuntu/Debian
    -sudo apt-get install python-ply
    +sudo apt-get install python3-ply
     
     # Fedora
    -sudo dnf install python-ply
    +sudo dnf install python3-ply
     
    -# MS-Windows (OSGeo4W: requires "python-pip" package to be installed)
    -python-pip install ply
    +# MS-Windows (OSGeo4W: requires "python3-pip" package to be installed)
    +python3-pip install ply
     
    +

    +Related publications: +

      +
    • Gebbert, S., Pebesma, E. 2014. TGRASS: A temporal GIS for field based environmental modeling. + Environmental Modelling & Software 53, 1-12 (DOI) + - preprint PDF
    • +
    • Gebbert, S., Pebesma, E. 2017. The GRASS GIS temporal framework. International Journal of + Geographical Information Science 31, 1273-1292 (DOI)
    • +
    • Gebbert, S., Leppelt, T., Pebesma, E., 2019. A topology based spatio-temporal map algebra for big data analysis. + Data 4, 86. (DOI)
    • +
    +

    SEE ALSO

    diff -Nru grass-7.8.0~rc1/Vagrantfile grass-7.8.0/Vagrantfile --- grass-7.8.0~rc1/Vagrantfile 2019-07-28 20:17:50.000000000 +0000 +++ grass-7.8.0/Vagrantfile 2019-08-16 12:55:06.000000000 +0000 @@ -63,15 +63,16 @@ "proj-bin", "libreadline-dev", "libsqlite3-dev", - "libwxgtk3.0-dev", + "libwxgtk3.0-gtk3-dev", "libxmu-dev", - "python", - "python-wxgtk3.0", - "python-dev", - "python-numpy", - "python-ply", - "python-pil", - "python-six", + "python3", + "python3-wxgtk4.0", + "python3-dateutil", + "python3-dev", + "python3-numpy", + "python3-ply", + "python3-pil", + "python3-six", "libnetcdf-dev", "netcdf-bin", "libblas-dev", diff -Nru grass-7.8.0~rc1/vector/v.in.ascii/local_proto.h grass-7.8.0/vector/v.in.ascii/local_proto.h --- grass-7.8.0~rc1/vector/v.in.ascii/local_proto.h 2019-05-18 15:50:05.000000000 +0000 +++ grass-7.8.0/vector/v.in.ascii/local_proto.h 2019-09-04 13:16:01.000000000 +0000 @@ -6,7 +6,7 @@ #include int points_analyse(FILE *, FILE *, char *, char *, int *, int *, int *, int *, int **, - int **, int, int, int, int, int, int, int); + char ***, int **, int, int, int, int, int, int, int); int points_to_bin(FILE *, int, struct Map_info *, dbDriver *, char *, char *, char *, int, int *, int, int, int, int, int); diff -Nru grass-7.8.0~rc1/vector/v.in.ascii/main.c grass-7.8.0/vector/v.in.ascii/main.c --- grass-7.8.0~rc1/vector/v.in.ascii/main.c 2019-06-03 20:34:21.000000000 +0000 +++ grass-7.8.0/vector/v.in.ascii/main.c 2019-09-04 13:16:01.000000000 +0000 @@ -261,6 +261,7 @@ if (format == GV_ASCII_FORMAT_POINT) { int i, rowlen, ncols, minncols, *coltype, *coltype2, *collen, nrows; + char **colsample; int n_int = 0, n_double = 0, n_string = 0; char buf[1000]; struct field_info *Fi; @@ -277,7 +278,7 @@ unlink(tmp); points_analyse(ascii, tmpascii, fs, td, &rowlen, &ncols, &minncols, - &nrows, &coltype, &collen, skip_lines, xcol, ycol, + &nrows, &coltype, &colsample, &collen, skip_lines, xcol, ycol, zcol, catcol, region_flag->answer, ignore_flag->answer); G_verbose_message(_("Maximum input row length: %d"), rowlen); @@ -312,16 +313,20 @@ } if (coltype[xcol] == DB_C_TYPE_STRING) { - G_fatal_error(_("'%s' column is not of number type"), "x"); + G_fatal_error(_("'%s' column is not of number type, " + "encountered: '%s'"), "x", colsample[xcol]); } if (coltype[ycol] == DB_C_TYPE_STRING) { - G_fatal_error(_("'%s' column is not of number type"), "y"); + G_fatal_error(_("'%s' column is not of number type, " + "encountered: '%s'"), "y", colsample[ycol]); } if (zcol >= 0 && coltype[zcol] == DB_C_TYPE_STRING) { - G_fatal_error(_("'%s' column is not of number type"), "z"); + G_fatal_error(_("'%s' column is not of number type, " + "encountered: '%s'"), "z", colsample[zcol]); } if (catcol >= 0 && coltype[catcol] == DB_C_TYPE_STRING) { - G_fatal_error(_("'%s' column is not of number type"), "cat"); + G_fatal_error(_("'%s' column is not of number type, " + "encountered: '%s'"), "cat", colsample[catcol]); } /* Create table */ @@ -467,12 +472,14 @@ switch (coltype[i]) { case DB_C_TYPE_INT: - if (ctype == DB_C_TYPE_DOUBLE) { + /* coltype=int and colsample=NULL indicate, + * an empty column, so we don't report anything. */ + if (ctype == DB_C_TYPE_DOUBLE && colsample[i]) { G_warning(_("Column number %d <%s> defined as double " "has only integer values"), i + 1, db_get_column_name(column)); } - else if (ctype == DB_C_TYPE_STRING) { + else if (ctype == DB_C_TYPE_STRING && colsample[i]) { G_warning(_("Column number %d <%s> defined as string " "has only integer values"), i + 1, db_get_column_name(column)); @@ -481,8 +488,10 @@ case DB_C_TYPE_DOUBLE: if (ctype == DB_C_TYPE_INT) { G_fatal_error(_("Column number %d <%s> defined as integer " - "has double values"), i + 1, - db_get_column_name(column)); + "has double values, encountered: '%s'"), + i + 1, + db_get_column_name(column), + colsample[i]); } else if (ctype == DB_C_TYPE_STRING) { G_warning(_("Column number %d <%s> defined as string " @@ -493,13 +502,15 @@ case DB_C_TYPE_STRING: if (ctype == DB_C_TYPE_INT) { G_fatal_error(_("Column number %d <%s> defined as integer " - "has string values"), i + 1, - db_get_column_name(column)); + "has string values, encountered: '%s'"), + i + 1, db_get_column_name(column), + colsample[i]); } else if (ctype == DB_C_TYPE_DOUBLE) { G_fatal_error(_("Column number %d <%s> defined as double " - "has string values"), i + 1, - db_get_column_name(column)); + "has string values, encountered: '%s'"), + i + 1, db_get_column_name(column), + colsample[i]); } if (length < collen[i]) { G_fatal_error(_("Length of column %d <%s> (%d) is less than " diff -Nru grass-7.8.0~rc1/vector/v.in.ascii/points.c grass-7.8.0/vector/v.in.ascii/points.c --- grass-7.8.0~rc1/vector/v.in.ascii/points.c 2019-06-03 20:34:21.000000000 +0000 +++ grass-7.8.0/vector/v.in.ascii/points.c 2019-09-04 13:16:01.000000000 +0000 @@ -48,12 +48,17 @@ * minncolumns: minimum number of columns * nrows: number of rows * column_type: column types + * column_sample: values which was used to decide the type or NULLs * column_length: column lengths (string only) + * + * If the who whole column is empty, column_sample will contain NULL + * for that given column. */ int points_analyse(FILE * ascii_in, FILE * ascii, char *fs, char *td, int *rowlength, int *ncolumns, int *minncolumns, - int *nrows, int **column_type, int **column_length, + int *nrows, int **column_type, char ***column_sample, + int **column_length, int skip_lines, int xcol, int ycol, int zcol, int catcol, int region_flag, int ignore_flag) { @@ -64,6 +69,7 @@ int ncols = 0; /* number of columns */ int minncols = -1; int *coltype = NULL; /* column types */ + char **colsample = NULL; /* column samples */ int *collen = NULL; /* column lengths */ char **tokens; int ntokens; /* number of tokens */ @@ -153,9 +159,12 @@ if (ntokens > ncols) { coltype = (int *)G_realloc(coltype, ntokens * sizeof(int)); + colsample = (char **)G_realloc(colsample, ntokens * sizeof(char *)); collen = (int *)G_realloc(collen, ntokens * sizeof(int)); for (i = ncols; i < ntokens; i++) { coltype[i] = DB_C_TYPE_INT; /* default type */ + /* We store a value later if column is not empty. */ + colsample[i] = NULL; collen[i] = 0; } ncols = ntokens; @@ -246,6 +255,9 @@ len = strlen(tokens[i]); /* do not guess column type for missing values */ + /* continue here ensures that we preserve NULLs in + * colsample for (completely) empty columns (which, however, + * should probably default to string rather than int). */ if (len == 0) continue; @@ -254,16 +266,30 @@ is_double(tokens[i])); if (is_int(tokens[i])) { + /* We store the first encountered value for integers. + * Rest is for consistency. */ + if (!colsample[i] || coltype[i] != DB_C_TYPE_INT) { + G_free(colsample[i]); + colsample[i] = G_store(tokens[i]); + } continue; /* integer */ } if (is_double(tokens[i])) { /* double */ if (coltype[i] == DB_C_TYPE_INT) { coltype[i] = DB_C_TYPE_DOUBLE; + G_free(colsample[i]); + colsample[i] = G_store(tokens[i]); } continue; } /* string */ - coltype[i] = DB_C_TYPE_STRING; + if (coltype[i] != DB_C_TYPE_STRING) { + /* Only set type if not already set to store the field + * only once and to show the first encountered item. */ + coltype[i] = DB_C_TYPE_STRING; + G_free(colsample[i]); + colsample[i] = G_store(tokens[i]); + } if (len > collen[i]) collen[i] = len; } @@ -289,6 +315,7 @@ *ncolumns = ncols; *minncolumns = minncols; *column_type = coltype; + *column_sample = colsample; *column_length = collen; *nrows = row - 1; /* including skipped lines */ diff -Nru grass-7.8.0~rc1/vector/v.kernel/main.c grass-7.8.0/vector/v.kernel/main.c --- grass-7.8.0~rc1/vector/v.kernel/main.c 2019-05-18 15:50:05.000000000 +0000 +++ grass-7.8.0/vector/v.kernel/main.c 2019-08-27 11:50:55.000000000 +0000 @@ -91,6 +91,7 @@ DCELL *output_cell = NULL; double sigma, dmax, segmax, netmax, multip; char *tmpstr1, *tmpstr2; + struct History history; double **coordinate; double sigmaOptimal; @@ -606,6 +607,10 @@ G_percent(1, 1, 1); Rast_close(fdout); + + Rast_short_history(out_opt->answer, "raster", &history); + Rast_command_history(&history); + Rast_write_history(out_opt->answer, &history); } G_done_msg(_("Maximum value in output: %e."), multip * gausmax); diff -Nru grass-7.8.0~rc1/vector/v.overlay/main.c grass-7.8.0/vector/v.overlay/main.c --- grass-7.8.0~rc1/vector/v.overlay/main.c 2019-05-18 15:50:05.000000000 +0000 +++ grass-7.8.0/vector/v.overlay/main.c 2019-08-27 11:50:55.000000000 +0000 @@ -47,7 +47,7 @@ struct line_cats *Cats; struct ilist *BList; char *desc; - int verbose; + int verbose, overwrite; struct field_info *Fi = NULL; int table_type; @@ -147,6 +147,8 @@ if (G_parser(argc, argv)) exit(EXIT_FAILURE); + overwrite = G_check_overwrite(argc, argv); + for (input = 0; input < 2; input++) { type[input] = Vect_option_to_types(type_opt[input]); } @@ -247,6 +249,20 @@ Fi->database, Fi->driver); } db_set_error_handler_driver(driver); + if (db_table_exists(Fi->driver, + Vect_subst_var(Fi->database, &Out), + Fi->table)) { + if (overwrite) { + G_warning(_("Table <%s> already exists and will be overwritten"), + Fi->table); + db_set_string(&stmt, Fi->table); + db_drop_table(driver, &stmt); + } + else { + G_fatal_error(_("Table <%s> already exists, use '%s'"), + Fi->table, "--overwrite"); + } + } } else { driver = NULL;