| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta http-equiv="content-type" content="text/html;charset=utf-8"> |
| <title>init.c</title> |
| <link rel="stylesheet" href="../css.css"> |
| <style type="text/css"> |
| a.fnlink {text-decoration: none} |
| a.fnlink:hover {text-decoration: underline} |
| </style> |
| </head> |
| <body> |
| <div id='container'> |
| <div id="background"></div> |
| <div id="jump_to"> |
| Jump To … |
| <div id="jump_wrapper"> |
| <div id="jump_page"> |
| <a class="source" href="../../#v0.25.1">API Docs</a> |
| <a class="source" href="add.html">add.c</a> |
| <a class="source" href="blame.html">blame.c</a> |
| <a class="source" href="cat-file.html">cat-file.c</a> |
| <a class="source" href="common.html">common.c</a> |
| <a class="source" href="describe.html">describe.c</a> |
| <a class="source" href="diff.html">diff.c</a> |
| <a class="source" href="for-each-ref.html">for-each-ref.c</a> |
| <a class="source" href="general.html">general.c</a> |
| <a class="source" href="init.html">init.c</a> |
| <a class="source" href="log.html">log.c</a> |
| <a class="source" href="network/clone.html">clone.c</a> |
| <a class="source" href="network/common.html">common.c</a> |
| <a class="source" href="network/fetch.html">fetch.c</a> |
| <a class="source" href="network/git2.html">git2.c</a> |
| <a class="source" href="network/index-pack.html">index-pack.c</a> |
| <a class="source" href="network/ls-remote.html">ls-remote.c</a> |
| <a class="source" href="remote.html">remote.c</a> |
| <a class="source" href="rev-list.html">rev-list.c</a> |
| <a class="source" href="rev-parse.html">rev-parse.c</a> |
| <a class="source" href="showindex.html">showindex.c</a> |
| <a class="source" href="status.html">status.c</a> |
| <a class="source" href="tag.html">tag.c</a> |
| </div> |
| </div> |
| </div> |
| <table cellspacing=0 cellpadding=0> |
| <thead> |
| <tr> |
| <th class=docs><h1>init.c</h1></th> |
| <th class=code></th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr id='section-1'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-1">¶</a> |
| </div> |
| |
| </td> |
| <td class=code> |
| <div class='highlight'><pre><span class="cm">/*</span> |
| <span class="cm"> * libgit2 "init" example - shows how to initialize a new repo</span> |
| <span class="cm"> *</span> |
| <span class="cm"> * Written by the libgit2 contributors</span> |
| <span class="cm"> *</span> |
| <span class="cm"> * To the extent possible under law, the author(s) have dedicated all copyright</span> |
| <span class="cm"> * and related and neighboring rights to this software to the public domain</span> |
| <span class="cm"> * worldwide. This software is distributed without any warranty.</span> |
| <span class="cm"> *</span> |
| <span class="cm"> * You should have received a copy of the CC0 Public Domain Dedication along</span> |
| <span class="cm"> * with this software. If not, see</span> |
| <span class="cm"> * <http://creativecommons.org/publicdomain/zero/1.0/>.</span> |
| <span class="cm"> */</span> |
| |
| <span class="cp">#include "common.h"</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-2'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-2">¶</a> |
| </div> |
| <p>This is a sample program that is similar to "git init". See the |
| documentation for that (try "git help init") to understand what this |
| program is emulating.</p> |
| |
| <p>This demonstrates using the libgit2 APIs to initialize a new repository.</p> |
| |
| <p>This also contains a special additional option that regular "git init" |
| does not support which is "--initial-commit" to make a first empty commit. |
| That is demonstrated in the "create<em>initial</em>commit" helper function.</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre></pre></div> |
| </td> |
| </tr> |
| <tr id='section-3'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-3">¶</a> |
| </div> |
| <p>Forward declarations of helpers</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre><span class="k">struct</span> <span class="n">opts</span> <span class="p">{</span> |
| <span class="kt">int</span> <span class="n">no_options</span><span class="p">;</span> |
| <span class="kt">int</span> <span class="n">quiet</span><span class="p">;</span> |
| <span class="kt">int</span> <span class="n">bare</span><span class="p">;</span> |
| <span class="kt">int</span> <span class="n">initial_commit</span><span class="p">;</span> |
| <span class="kt">uint32_t</span> <span class="n">shared</span><span class="p">;</span> |
| <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">template</span><span class="p">;</span> |
| <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">gitdir</span><span class="p">;</span> |
| <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">dir</span><span class="p">;</span> |
| <span class="p">};</span> |
| <span class="k">static</span> <span class="kt">void</span> <span class="nf">create_initial_commit</span><span class="p">(</span><span class="n">git_repository</span> <span class="o">*</span><span class="n">repo</span><span class="p">);</span> |
| <span class="k">static</span> <span class="kt">void</span> <span class="nf">parse_opts</span><span class="p">(</span><span class="k">struct</span> <span class="n">opts</span> <span class="o">*</span><span class="n">o</span><span class="p">,</span> <span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">argv</span><span class="p">[]);</span> |
| |
| |
| <span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">argv</span><span class="p">[])</span> |
| <span class="p">{</span> |
| <span class="n">git_repository</span> <span class="o">*</span><span class="n">repo</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> |
| <span class="k">struct</span> <span class="n">opts</span> <span class="n">o</span> <span class="o">=</span> <span class="p">{</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">GIT_REPOSITORY_INIT_SHARED_UMASK</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span> <span class="p">};</span> |
| |
| <span class="n"><a name="git_libgit2_init-2" class="fnlink" href="../../#v0.25.1/group/libgit2/git_libgit2_init">git_libgit2_init</a></span><span class="p">();</span> |
| |
| <span class="n">parse_opts</span><span class="p">(</span><span class="o">&</span><span class="n">o</span><span class="p">,</span> <span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span> |
| |
| <span class="cm">/* Initialize repository. */</span> |
| |
| <span class="k">if</span> <span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">no_options</span><span class="p">)</span> <span class="p">{</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-4'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-4">¶</a> |
| </div> |
| <p>No options were specified, so let's demonstrate the default |
| simple case of git<em>repository</em>init() API usage...</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre> <span class="n">check_lg2</span><span class="p">(</span><span class="n"><a name="git_repository_init-7" class="fnlink" href="../../#v0.25.1/group/repository/git_repository_init">git_repository_init</a></span><span class="p">(</span><span class="o">&</span><span class="n">repo</span><span class="p">,</span> <span class="n">o</span><span class="p">.</span><span class="n">dir</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> |
| <span class="s">"Could not initialize repository"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> |
| <span class="p">}</span> |
| <span class="k">else</span> <span class="p">{</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-5'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-5">¶</a> |
| </div> |
| <p>Some command line options were specified, so we'll use the |
| extended init API to handle them</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre> <span class="n">git_repository_init_options</span> <span class="n">initopts</span> <span class="o">=</span> <span class="n">GIT_REPOSITORY_INIT_OPTIONS_INIT</span><span class="p">;</span> |
| <span class="n">initopts</span><span class="p">.</span><span class="n">flags</span> <span class="o">=</span> <span class="n">GIT_REPOSITORY_INIT_MKPATH</span><span class="p">;</span> |
| |
| <span class="k">if</span> <span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">bare</span><span class="p">)</span> |
| <span class="n">initopts</span><span class="p">.</span><span class="n">flags</span> <span class="o">|=</span> <span class="n">GIT_REPOSITORY_INIT_BARE</span><span class="p">;</span> |
| |
| <span class="k">if</span> <span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">template</span><span class="p">)</span> <span class="p">{</span> |
| <span class="n">initopts</span><span class="p">.</span><span class="n">flags</span> <span class="o">|=</span> <span class="n">GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE</span><span class="p">;</span> |
| <span class="n">initopts</span><span class="p">.</span><span class="n">template_path</span> <span class="o">=</span> <span class="n">o</span><span class="p">.</span><span class="n">template</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">if</span> <span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">gitdir</span><span class="p">)</span> <span class="p">{</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-6'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-6">¶</a> |
| </div> |
| <p>If you specified a separate git directory, then initialize |
| the repository at that path and use the second path as the |
| working directory of the repository (with a git-link file)</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre> <span class="n">initopts</span><span class="p">.</span><span class="n">workdir_path</span> <span class="o">=</span> <span class="n">o</span><span class="p">.</span><span class="n">dir</span><span class="p">;</span> |
| <span class="n">o</span><span class="p">.</span><span class="n">dir</span> <span class="o">=</span> <span class="n">o</span><span class="p">.</span><span class="n">gitdir</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">if</span> <span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">shared</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> |
| <span class="n">initopts</span><span class="p">.</span><span class="n">mode</span> <span class="o">=</span> <span class="n">o</span><span class="p">.</span><span class="n">shared</span><span class="p">;</span> |
| |
| <span class="n">check_lg2</span><span class="p">(</span><span class="n"><a name="git_repository_init_ext-8" class="fnlink" href="../../#v0.25.1/group/repository/git_repository_init_ext">git_repository_init_ext</a></span><span class="p">(</span><span class="o">&</span><span class="n">repo</span><span class="p">,</span> <span class="n">o</span><span class="p">.</span><span class="n">dir</span><span class="p">,</span> <span class="o">&</span><span class="n">initopts</span><span class="p">),</span> |
| <span class="s">"Could not initialize repository"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> |
| <span class="p">}</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-7'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-7">¶</a> |
| </div> |
| <p>Print a message to stdout like "git init" does.</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">o</span><span class="p">.</span><span class="n">quiet</span><span class="p">)</span> <span class="p">{</span> |
| <span class="k">if</span> <span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">bare</span> <span class="o">||</span> <span class="n">o</span><span class="p">.</span><span class="n">gitdir</span><span class="p">)</span> |
| <span class="n">o</span><span class="p">.</span><span class="n">dir</span> <span class="o">=</span> <span class="n"><a name="git_repository_path-9" class="fnlink" href="../../#v0.25.1/group/repository/git_repository_path">git_repository_path</a></span><span class="p">(</span><span class="n">repo</span><span class="p">);</span> |
| <span class="k">else</span> |
| <span class="n">o</span><span class="p">.</span><span class="n">dir</span> <span class="o">=</span> <span class="n"><a name="git_repository_workdir-10" class="fnlink" href="../../#v0.25.1/group/repository/git_repository_workdir">git_repository_workdir</a></span><span class="p">(</span><span class="n">repo</span><span class="p">);</span> |
| |
| <span class="n">printf</span><span class="p">(</span><span class="s">"Initialized empty Git repository in %s</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">o</span><span class="p">.</span><span class="n">dir</span><span class="p">);</span> |
| <span class="p">}</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-8'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-8">¶</a> |
| </div> |
| <p>As an extension to the basic "git init" command, this example |
| gives the option to create an empty initial commit. This is |
| mostly to demonstrate what it takes to do that, but also some |
| people like to have that empty base commit in their repo.</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre> <span class="k">if</span> <span class="p">(</span><span class="n">o</span><span class="p">.</span><span class="n">initial_commit</span><span class="p">)</span> <span class="p">{</span> |
| <span class="n">create_initial_commit</span><span class="p">(</span><span class="n">repo</span><span class="p">);</span> |
| <span class="n">printf</span><span class="p">(</span><span class="s">"Created empty initial commit</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="n"><a name="git_repository_free-6" class="fnlink" href="../../#v0.25.1/group/repository/git_repository_free">git_repository_free</a></span><span class="p">(</span><span class="n">repo</span><span class="p">);</span> |
| <span class="n"><a name="git_libgit2_shutdown-3" class="fnlink" href="../../#v0.25.1/group/libgit2/git_libgit2_shutdown">git_libgit2_shutdown</a></span><span class="p">();</span> |
| |
| <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> |
| <span class="p">}</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-9'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-9">¶</a> |
| </div> |
| <p>Unlike regular "git init", this example shows how to create an initial |
| empty commit in the repository. This is the helper function that does |
| that.</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre><span class="k">static</span> <span class="kt">void</span> <span class="nf">create_initial_commit</span><span class="p">(</span><span class="n">git_repository</span> <span class="o">*</span><span class="n">repo</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">git_signature</span> <span class="o">*</span><span class="n">sig</span><span class="p">;</span> |
| <span class="n">git_index</span> <span class="o">*</span><span class="n">index</span><span class="p">;</span> |
| <span class="n">git_oid</span> <span class="n">tree_id</span><span class="p">,</span> <span class="n">commit_id</span><span class="p">;</span> |
| <span class="n">git_tree</span> <span class="o">*</span><span class="n">tree</span><span class="p">;</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-10'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-10">¶</a> |
| </div> |
| <p>First use the config to initialize a commit signature for the user.</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre> <span class="k">if</span> <span class="p">(</span><span class="n"><a name="git_signature_default-12" class="fnlink" href="../../#v0.25.1/group/signature/git_signature_default">git_signature_default</a></span><span class="p">(</span><span class="o">&</span><span class="n">sig</span><span class="p">,</span> <span class="n">repo</span><span class="p">)</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> |
| <span class="n">fatal</span><span class="p">(</span><span class="s">"Unable to create a commit signature."</span><span class="p">,</span> |
| <span class="s">"Perhaps 'user.name' and 'user.email' are not set"</span><span class="p">);</span> |
| |
| <span class="cm">/* Now let's create an empty tree for this commit */</span> |
| |
| <span class="k">if</span> <span class="p">(</span><span class="n"><a name="git_repository_index-11" class="fnlink" href="../../#v0.25.1/group/repository/git_repository_index">git_repository_index</a></span><span class="p">(</span><span class="o">&</span><span class="n">index</span><span class="p">,</span> <span class="n">repo</span><span class="p">)</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> |
| <span class="n">fatal</span><span class="p">(</span><span class="s">"Could not open repository index"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-11'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-11">¶</a> |
| </div> |
| <p>Outside of this example, you could call git<em>index</em>add_bypath() |
| here to put actual files into the index. For our purposes, we'll |
| leave it empty for now.</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre> <span class="k">if</span> <span class="p">(</span><span class="n"><a name="git_index_write_tree-5" class="fnlink" href="../../#v0.25.1/group/index/git_index_write_tree">git_index_write_tree</a></span><span class="p">(</span><span class="o">&</span><span class="n">tree_id</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> |
| <span class="n">fatal</span><span class="p">(</span><span class="s">"Unable to write initial tree from index"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> |
| |
| <span class="n"><a name="git_index_free-4" class="fnlink" href="../../#v0.25.1/group/index/git_index_free">git_index_free</a></span><span class="p">(</span><span class="n">index</span><span class="p">);</span> |
| |
| <span class="k">if</span> <span class="p">(</span><span class="n"><a name="git_tree_lookup-14" class="fnlink" href="../../#v0.25.1/group/tree/git_tree_lookup">git_tree_lookup</a></span><span class="p">(</span><span class="o">&</span><span class="n">tree</span><span class="p">,</span> <span class="n">repo</span><span class="p">,</span> <span class="o">&</span><span class="n">tree_id</span><span class="p">)</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> |
| <span class="n">fatal</span><span class="p">(</span><span class="s">"Could not look up initial tree"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-12'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-12">¶</a> |
| </div> |
| <p>Ready to create the initial commit.</p> |
| |
| <p>Normally creating a commit would involve looking up the current |
| HEAD commit and making that be the parent of the initial commit, |
| but here this is the first commit so there will be no parent.</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre> <span class="k">if</span> <span class="p">(</span><span class="n"><a name="git_commit_create_v-1" class="fnlink" href="../../#v0.25.1/group/commit/git_commit_create_v">git_commit_create_v</a></span><span class="p">(</span> |
| <span class="o">&</span><span class="n">commit_id</span><span class="p">,</span> <span class="n">repo</span><span class="p">,</span> <span class="s">"HEAD"</span><span class="p">,</span> <span class="n">sig</span><span class="p">,</span> <span class="n">sig</span><span class="p">,</span> |
| <span class="nb">NULL</span><span class="p">,</span> <span class="s">"Initial commit"</span><span class="p">,</span> <span class="n">tree</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span> |
| <span class="n">fatal</span><span class="p">(</span><span class="s">"Could not create the initial commit"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-13'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-13">¶</a> |
| </div> |
| <p>Clean up so we don't leak memory.</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre> <span class="n"><a name="git_tree_free-15" class="fnlink" href="../../#v0.25.1/group/tree/git_tree_free">git_tree_free</a></span><span class="p">(</span><span class="n">tree</span><span class="p">);</span> |
| <span class="n"><a name="git_signature_free-13" class="fnlink" href="../../#v0.25.1/group/signature/git_signature_free">git_signature_free</a></span><span class="p">(</span><span class="n">sig</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="nf">usage</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">error</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">arg</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="s">"error: %s '%s'</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> <span class="n">error</span><span class="p">,</span> <span class="n">arg</span><span class="p">);</span> |
| <span class="n">fprintf</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> |
| <span class="s">"usage: init [-q | --quiet] [--bare] [--template=<dir>]</span><span class="se">\n</span><span class="s">"</span> |
| <span class="s">" [--shared[=perms]] [--initial-commit]</span><span class="se">\n</span><span class="s">"</span> |
| <span class="s">" [--separate-git-dir] <directory></span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> |
| <span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> |
| <span class="p">}</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-14'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-14">¶</a> |
| </div> |
| <p>Parse the tail of the --shared= argument.</p> |
| </td> |
| <td class=code> |
| <div class='highlight'><pre><span class="k">static</span> <span class="kt">uint32_t</span> <span class="nf">parse_shared</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">shared</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">shared</span><span class="p">,</span> <span class="s">"false"</span><span class="p">)</span> <span class="o">||</span> <span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">shared</span><span class="p">,</span> <span class="s">"umask"</span><span class="p">))</span> |
| <span class="k">return</span> <span class="n">GIT_REPOSITORY_INIT_SHARED_UMASK</span><span class="p">;</span> |
| |
| <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">shared</span><span class="p">,</span> <span class="s">"true"</span><span class="p">)</span> <span class="o">||</span> <span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">shared</span><span class="p">,</span> <span class="s">"group"</span><span class="p">))</span> |
| <span class="k">return</span> <span class="n">GIT_REPOSITORY_INIT_SHARED_GROUP</span><span class="p">;</span> |
| |
| <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">shared</span><span class="p">,</span> <span class="s">"all"</span><span class="p">)</span> <span class="o">||</span> <span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">shared</span><span class="p">,</span> <span class="s">"world"</span><span class="p">)</span> <span class="o">||</span> |
| <span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">shared</span><span class="p">,</span> <span class="s">"everybody"</span><span class="p">))</span> |
| <span class="k">return</span> <span class="n">GIT_REPOSITORY_INIT_SHARED_ALL</span><span class="p">;</span> |
| |
| <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">shared</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'0'</span><span class="p">)</span> <span class="p">{</span> |
| <span class="kt">long</span> <span class="n">val</span><span class="p">;</span> |
| <span class="kt">char</span> <span class="o">*</span><span class="n">end</span> <span class="o">=</span> <span class="nb">NULL</span><span class="p">;</span> |
| <span class="n">val</span> <span class="o">=</span> <span class="n">strtol</span><span class="p">(</span><span class="n">shared</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="o">&</span><span class="n">end</span><span class="p">,</span> <span class="mi">8</span><span class="p">);</span> |
| <span class="k">if</span> <span class="p">(</span><span class="n">end</span> <span class="o">==</span> <span class="n">shared</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">||</span> <span class="o">*</span><span class="n">end</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> |
| <span class="n">usage</span><span class="p">(</span><span class="s">"invalid octal value for --shared"</span><span class="p">,</span> <span class="n">shared</span><span class="p">);</span> |
| <span class="k">return</span> <span class="p">(</span><span class="kt">uint32_t</span><span class="p">)</span><span class="n">val</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">else</span> |
| <span class="n">usage</span><span class="p">(</span><span class="s">"unknown value for --shared"</span><span class="p">,</span> <span class="n">shared</span><span class="p">);</span> |
| |
| <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="nf">parse_opts</span><span class="p">(</span><span class="k">struct</span> <span class="n">opts</span> <span class="o">*</span><span class="n">o</span><span class="p">,</span> <span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">argv</span><span class="p">[])</span> |
| <span class="p">{</span> |
| <span class="k">struct</span> <span class="n">args_info</span> <span class="n">args</span> <span class="o">=</span> <span class="n">ARGS_INFO_INIT</span><span class="p">;</span> |
| <span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">sharedarg</span><span class="p">;</span></pre></div> |
| </td> |
| </tr> |
| <tr id='section-15'> |
| <td class=docs> |
| <div class="pilwrap"> |
| <a class="pilcrow" href="#section-15">¶</a> |
| </div> |
| <p>Process arguments.</p> |
| |
| </td> |
| <td class=code> |
| <div class='highlight'><pre> <span class="k">for</span> <span class="p">(</span><span class="n">args</span><span class="p">.</span><span class="n">pos</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="n">args</span><span class="p">.</span><span class="n">pos</span> <span class="o"><</span> <span class="n">argc</span><span class="p">;</span> <span class="o">++</span><span class="n">args</span><span class="p">.</span><span class="n">pos</span><span class="p">)</span> <span class="p">{</span> |
| <span class="kt">char</span> <span class="o">*</span><span class="n">a</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="n">args</span><span class="p">.</span><span class="n">pos</span><span class="p">];</span> |
| |
| <span class="k">if</span> <span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'-'</span><span class="p">)</span> |
| <span class="n">o</span><span class="o">-></span><span class="n">no_options</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> |
| |
| <span class="k">if</span> <span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'-'</span><span class="p">)</span> <span class="p">{</span> |
| <span class="k">if</span> <span class="p">(</span><span class="n">o</span><span class="o">-></span><span class="n">dir</span> <span class="o">!=</span> <span class="nb">NULL</span><span class="p">)</span> |
| <span class="n">usage</span><span class="p">(</span><span class="s">"extra argument"</span><span class="p">,</span> <span class="n">a</span><span class="p">);</span> |
| <span class="n">o</span><span class="o">-></span><span class="n">dir</span> <span class="o">=</span> <span class="n">a</span><span class="p">;</span> |
| <span class="p">}</span> |
| <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s">"-q"</span><span class="p">)</span> <span class="o">||</span> <span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s">"--quiet"</span><span class="p">))</span> |
| <span class="n">o</span><span class="o">-></span><span class="n">quiet</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> |
| <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s">"--bare"</span><span class="p">))</span> |
| <span class="n">o</span><span class="o">-></span><span class="n">bare</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> |
| <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s">"--shared"</span><span class="p">))</span> |
| <span class="n">o</span><span class="o">-></span><span class="n">shared</span> <span class="o">=</span> <span class="n">GIT_REPOSITORY_INIT_SHARED_GROUP</span><span class="p">;</span> |
| <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">strcmp</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="s">"--initial-commit"</span><span class="p">))</span> |
| <span class="n">o</span><span class="o">-></span><span class="n">initial_commit</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> |
| <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">match_str_arg</span><span class="p">(</span><span class="o">&</span><span class="n">sharedarg</span><span class="p">,</span> <span class="o">&</span><span class="n">args</span><span class="p">,</span> <span class="s">"--shared"</span><span class="p">))</span> |
| <span class="n">o</span><span class="o">-></span><span class="n">shared</span> <span class="o">=</span> <span class="n">parse_shared</span><span class="p">(</span><span class="n">sharedarg</span><span class="p">);</span> |
| <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">match_str_arg</span><span class="p">(</span><span class="o">&</span><span class="n">o</span><span class="o">-></span><span class="n">template</span><span class="p">,</span> <span class="o">&</span><span class="n">args</span><span class="p">,</span> <span class="s">"--template"</span><span class="p">)</span> <span class="o">||</span> |
| <span class="o">!</span><span class="n">match_str_arg</span><span class="p">(</span><span class="o">&</span><span class="n">o</span><span class="o">-></span><span class="n">gitdir</span><span class="p">,</span> <span class="o">&</span><span class="n">args</span><span class="p">,</span> <span class="s">"--separate-git-dir"</span><span class="p">))</span> |
| <span class="n">usage</span><span class="p">(</span><span class="s">"unknown option"</span><span class="p">,</span> <span class="n">a</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">o</span><span class="o">-></span><span class="n">dir</span><span class="p">)</span> |
| <span class="n">usage</span><span class="p">(</span><span class="s">"must specify directory to init"</span><span class="p">,</span> <span class="nb">NULL</span><span class="p">);</span> |
| <span class="p">}</span></pre></div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| </body> |