From patchwork Fri Oct 11 17:55:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D7054: phabricator: treat non-utf-8 text files as binary as phabricator requires From: phabricator X-Patchwork-Id: 42236 Message-Id: <018a1f8d60180d671855ad3af2a91e5e@localhost.localdomain> To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Fri, 11 Oct 2019 17:55:39 +0000 Kwan added a comment. Kwan updated this revision to Diff 17084. Fix some test-check-code issues, and one test-check-pyflakes unused local. REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D7054?vs=17060&id=17084 BRANCH default CHANGES SINCE LAST ACTION https://phab.mercurial-scm.org/D7054/new/ REVISION DETAIL https://phab.mercurial-scm.org/D7054 AFFECTED FILES hgext/phabricator.py CHANGE DETAILS To: Kwan, #hg-reviewers Cc: mercurial-devel diff --git a/hgext/phabricator.py b/hgext/phabricator.py --- a/hgext/phabricator.py +++ b/hgext/phabricator.py @@ -695,6 +695,23 @@ gitmode = {b'l': b'120000', b'x': b'100755', b'': b'100644'} +def notutf8(fctx): + """detect non-UTF-8 text files since Phabricator requires them to be marked + as binary + """ + try: + fctx.data().decode('utf-8') + if fctx.parents(): + fctx.p1().data().decode('utf-8') + return False + except UnicodeDecodeError: + fctx.repo().ui.write( + _(b'file %s detected as non-UTF-8, marked as binary\n') + % fctx.path() + ) + return True + + def addremoved(pdiff, ctx, removed): """add removed files to the phabdiff. Shouldn't include moves""" for fname in removed: @@ -703,7 +720,7 @@ ) pchange.addoldmode(gitmode[ctx.p1()[fname].flags()]) fctx = ctx.p1()[fname] - if not fctx.isbinary(): + if not (fctx.isbinary() or notutf8(fctx)): maketext(pchange, ctx, fname) pdiff.addchange(pchange) @@ -720,7 +737,7 @@ pchange.addoldmode(originalmode) pchange.addnewmode(filemode) - if fctx.isbinary(): + if fctx.isbinary() or notutf8(fctx): makebinary(pchange, fctx) addoldbinary(pchange, fctx, fname) else: @@ -779,7 +796,7 @@ pchange.addnewmode(gitmode[fctx.flags()]) pchange.type = DiffChangeType.ADD - if fctx.isbinary(): + if fctx.isbinary() or notutf8(fctx): makebinary(pchange, fctx) if renamed: addoldbinary(pchange, fctx, originalfname)