Firefoxへの私の最初の貢献


もともと公開my personal blog .
過去数年間以来、私はオープンソースmost of my projects また、いくつかの小さなものに貢献した.しかし、私はいつも大規模で人気のあるオープンソースプロジェクトに貢献したいと思っています.私は最終的に先月そのことをやった.私は11月2日に受け入れられたMozilla FirefoxのJavaScriptエンジンSpidermonkeyにパッチを提出した.

私は毎日Firefoxを使用します.私は、プライバシーの価値と原則とMozillaが保持するオープンなインターネットを評価して、信じています.また、そのようなプロジェクトでボランティア活動をしている人々にとって、高い敬意を持っています.したがって、それは戻って貢献することを感じた!
この投稿は2つの目的にあります.
  • 私の経験を、Mozilla(または他の主要なオープンソースプロジェクトに貢献するように人々を刺激することを願って)を文書化するために
  • 彼らはかなり関与したプロセスを持っているので、誰かのMozillaへの最初の貢献をするためのガイドとして機能するために、私はあなたと同じ過ちを繰り返す必要はありません!
  • バグ発見


    マイパッチフィックスthis bug , 私はCodetribute . あなたは初心者に優しいバグを見つけるために';良い最初のバグ';フィルタを使用することができます.CodeTributeだけのバグを一覧表示;彼らは実際にMozillaのバグトラッカーに存在する.BugZilla . したら、他の誰かが既にそれに取り組んでいる場合は、面白い、チェックを見つけるバグを見つける.そうでなければ、あなたがそれに取り組むことを望むコメントを加えてください.
    ソースコードを取得し、プロジェクトを構築し、テストを実行するなどの指示を検索する必要があります.例えば、ここにSpiderMonkey's getting started guide . これは、あなたが貢献しているFirefoxのどのプロジェクト/モジュールによって異なります.

    私が修理したバグ


    私の貢献はJavaScriptパーサーによって報告されたエラーを改善します.幸運にも、私は、数値セパレータと呼ばれるJavaScriptの新しい新機能に取り組みました.これは、数字の間にアンダースコアを追加することにより、あなたの長い数値リテラルを読みやすくすることができます.この機能はFirefox 70で2019年10月後半に出荷され、Firefox 72ではパッチが有効になります.
    // Hard to read
    let i = 1000000;
    
    // Numeric separators improve readability
    let i = 1_000_000;
    
    The ES6 specification つのアンダースコアを2桁の数値セパレータとしてのみ許可します.また、数値リテラルはアンダースコアで終了してはなりません.このように、次のコード行は不正です.
    let i = 100__0;
    
    let j = 100_;
    
    Firefox 70の下でこのコードを実行すると、両方のケースで同じエラーが表示されます.

    意味を正しくするか.しかし、Spidermonkeyチームはこれらのケースのために別々のエラーメッセージを望みました.以下はFirefoxのスクリーンショットです.

    これらのエラーメッセージは、文脈的に意識していて、プログラマが期待するものと並んでいる.

    修正を書く


    ありがたいことに、Mozillaのものはフィックスに関するBugzilla糸に関する詳細な指示を提供しました.したがって、それはちょうどC +のいくつかの行の問題でした.それは本当に簡単でした.
    パッチを見ることができますhere .
    疑問がある場合は、ちょうどBugzillaスレッドにコメントを残したり、IRC上の各チームに手を差し伸べる.Mozillaのコミュニティは信じられないほど歓迎されています.ためらうな.コミュニケーションが鍵です.それは私がこの過程で学んだ最も重要なことの一つです.

    パッチの作成


    変更を行い、テストを実行して、準備ができたら、ローカルのMercurialリポジトリにコミットすることができます.
    // view the changed files
    hg status
    
    // view your changes
    hg diff
    
    // stage all of your changes
    hg add .
    
    // commit the staged changes
    hg commit -m "Bug 1589072 - Improve numeric separators error messages"
    
    コミットメッセージの場合は、上記の書式を使用します.その番号はバグのIDです、そして、以下のメッセージはBugzillaからのそのタイトルです.

    パッチの提出


    これは難しい部分です、そして、そこで、私は最も台無しになりました.Mozillaはそれ自身のインフラストラクチャを使用しているので、GitHubにプル要求を開くほど簡単ではありません.
    まず、レビュー用にパッチを提出する必要があります.Mozillaの使用Phabricator この目的のために.あなたのパッチを提出するために、コマンドラインツールを使用する必要がありますmoz-phab . フォローthis guide Phabricatorアカウントを設定しインストールするにはmoz-phab ローカル.
    次に、端末を開き、cd Firefoxのリポジトリに.ここでは、単に実行することができますmoz-phab そして、それはphabricatorに変更をプッシュし、リビジョンを作成します.そのリンクは端末に表示されます.
    phabricatorの使用方法の詳細についてはworkflow walkthrough .

    コードレビュー


    今、あなたはチームから誰かのパッチを確認するのを待つ必要があります.彼らはいくつかの変更を要求したり、いくつかの提案を行う可能性があります.必要な変更を行います.もう一度、疑問や質問がある場合は、チームと通信し、それらをクリア!

    変更をパッチに送信する


    ここで注意を行使する必要があります.あなたは、ちょうど走る必要があると仮定するかもしれませんhg commit and moz-phab 再びphabricatorにあなたの変更をプッシュします.これを行うと、phabricatorの完全に新しいリビジョンを作成することになります.これが私が犯した間違いです.
    新しいコミットを作成すべきではありません.代わりに、変更を元のコミットに追加します.以下のようにします.
    hg commit --amend
    
    を加えるな-m フラグ.ちょうど上記のコマンドを実行します.そして、それはコミットメッセージをあなたに尋ねているあなたのテキストエディタを開きます.加えるそれは以前と同じことができます.次の行で追加します.
    Differential revision: <link-to-original-phabricator-revision>
    
    // for example:
    Differential revision: https://phabricator.services.mozilla.com/D51134
    
    これはmoz-phab このコミットはオリジナルパッチへのリビジョンです.その結果、これらの変更を同じリビジョンに追加します.あなたは現在phabricatorの上であなたの改正を見ることができます.

    受入及び着陸


    レビュアーがあなたの変更に満足しているならば、S/Heはあなたのパッチを受け入れます.次に、誰かがあなたのパッチを『ランド』するのを待つ必要があります.私は完全に確信していません、しかし、私はそれがcentral repository . MozillaのSheriffsの1つは、あなたがこのポストを読んでいるならば、あなたが最もコミット権利を持っていないので、あなたのためにそうするでしょう.
    一度それを行う、よく、おめでとう!だけでなく、あなたの最初のパッチを介して動作し、それを提出したが、また、それを受け入れた!あなたはFirefoxの夜間ビルドであなたの変更ライブをチェックアウトすることができます.

    結論


    私は、このポストがそのゴール(または多分両方)のうちの1つに役立ったことを望みます.私はこのプロセスを楽しみ、私のパッチを誇りに思っています.Firefoxに定期的に貢献したいです.
    我々は、オープンソースのソフトウェアを使用して、毎日、故意に.あなたは時間とスキルがある場合は、貢献してください!与える気持ちは驚くべきものです.
    それは今日のために、次のいずれかであなたを参照してください!
    PS :私の友人に感謝したいspaCy これを行うには私にインスピレーション!