Changeset - 419329d436fd
[Not reviewed]
stable
0 1 0
Mads Kiilerich (mads) - 20 months ago 2024-07-20 17:10:24
mads@kiilerich.com
Grafted from: d3e51dcbc874
scripts: update i18n dev script to modern hg

Support for old hg versions is not a concern for dev scripts like this.
1 file changed with 8 insertions and 10 deletions:
0 comments (0 inline, 0 general)
scripts/i18n
Show inline comments
 
@@ -11,24 +11,25 @@
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
# GNU General Public License for more details.
 
#
 
# You should have received a copy of the GNU General Public License
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 

	
 
import os
 
import shutil
 
import sys
 

	
 
import click
 
import i18n_utils
 
from mercurial import util
 

	
 

	
 
"""
 
Tool for maintenance of .po and .pot files
 

	
 
Normally, the i18n-related files contain for each translatable string a
 
reference to all the source code locations where this string is found. This
 
meta data is useful for translators to assess how strings are used, but is not
 
relevant for normal development nor for running Kallithea. Such meta data, or
 
derived data like kallithea.pot, will inherently be outdated, and create
 
unnecessary churn and repository growth, making it harder to spot actual and
 
important changes.
 
@@ -81,54 +82,51 @@ def normalized_merge(local, base, other,
 
    If a .pot file is specified, the po files will instead be updated by
 
    running GNU msgmerge with this .pot file, thus updating source code
 
    references and preserving comments and outdated translations.
 

	
 
    Add the following to your user or repository-specific .hgrc file to use it:
 
        [merge-tools]
 
        i18n.executable = /path/to/scripts/i18n
 
        i18n.args = normalized-merge $local $base $other $output
 

	
 
    and then invoke merge/rebase/graft with the additional argument '--tool i18n'.
 
    """
 
    from mercurial import context, simplemerge
 
    from mercurial import ui as uimod
 

	
 
    print('i18n normalized-merge: normalizing and merging %s' % output)
 

	
 
    i18n_utils._normalize_po_file(local, merge_pot_file=merge_pot_file, strip=strip)
 
    i18n_utils._normalize_po_file(base, merge_pot_file=merge_pot_file, strip=strip)
 
    i18n_utils._normalize_po_file(other, merge_pot_file=merge_pot_file, strip=strip)
 
    i18n_utils._normalize_po_file(output, merge_pot_file=merge_pot_file, strip=strip)
 

	
 
    # simplemerge will write markers to 'local' if it fails, keep a copy without markers
 
    localkeep = local + '.keep'
 
    shutil.copyfile(local, localkeep)
 

	
 
    ret = simplemerge.simplemerge(uimod.ui.load(),
 
         context.arbitraryfilectx(local.encode('utf-8')),
 
         context.arbitraryfilectx(base.encode('utf-8')),
 
         context.arbitraryfilectx(other.encode('utf-8')),
 
         label=[b'local', b'other', b'base'],
 
    merged_text, conflicts = simplemerge.simplemerge(
 
         simplemerge.MergeInput(context.arbitraryfilectx(local.encode('utf-8'), b'local')),
 
         simplemerge.MergeInput(context.arbitraryfilectx(base.encode('utf-8'), b'base')),
 
         simplemerge.MergeInput(context.arbitraryfilectx(other.encode('utf-8'), b'other')),
 
         mode='merge',
 
    )
 
    shutil.copyfile(local, output)  # simplemerge wrote to local - either resolved or with conflict markers
 
    if ret:
 
    util.writefile(output, merged_text)  # either resolved or with conflict markers
 
    if conflicts:
 
        shutil.copyfile(localkeep, local)
 
        basekeep = base + '.keep'
 
        otherkeep = other + '.keep'
 
        shutil.copyfile(base, basekeep)
 
        shutil.copyfile(other, otherkeep)
 
        sys.stderr.write("Error: simple merge failed and %s is left with conflict markers. Resolve the conflicts, then use 'hg resolve -m'.\n" % output)
 
        sys.stderr.write('Resolve with e.g.: kdiff3 %s %s %s -o %s\n' % (basekeep, localkeep, otherkeep, output))
 
        sys.exit(ret)
 
        sys.exit(1)
 

	
 
    os.remove(localkeep)
 

	
 
@cli.command()
 
@click.argument('file1')
 
@click.argument('file2')
 
@click.option('--merge-pot-file', default=None)
 
@click.option('--strip/--no-strip', default=False)
 
def normalized_diff(file1, file2, merge_pot_file, strip):
 
    """Compare two files while transparently normalizing them."""
 
    sys.exit(i18n_utils._normalized_diff(file1, file2, merge_pot_file=merge_pot_file, strip=strip))
 

	
0 comments (0 inline, 0 general)