Operating system and container binary deployment and upgrades
Go to file
Colin Walters fab1e113db When mirroring, write content directly, do not verify
When doing a pull --mirror from an archive-z2 repository into another
archive-z2 repository, currently we gunzip/checksum/gzip each content
object.  The re-gzip process in particular is fairly expensive.

This does assume that the upstream content is trusted and correct.
It'd be nice in the future to do at least a CRC check, if not the full
checksum.  (Could we append CRC data to the end of filez objects?)

We could also choose to only do this optimization if fetching over
TLS.

before: 1626 metadata, 20320 content objects fetched; 299634 KiB transferred in 62 seconds
after : 1626 metadata, 20320 content objects fetched; 299634 KiB transferred in 11 seconds
2015-02-05 21:24:21 -05:00
build-aux Add infrastructure for "make syntax-check" 2015-01-30 15:27:36 +01:00
doc syntax-check: Remove empty lines at the end of file 2015-02-02 15:07:56 +01:00
manual-tests manual-tests: New directory with custom test scripts 2014-02-14 18:16:37 -05:00
packaging packaging: Add man5 pages 2015-02-03 20:28:37 -05:00
src When mirroring, write content directly, do not verify 2015-02-05 21:24:21 -05:00
tests When mirroring, write content directly, do not verify 2015-02-05 21:24:21 -05:00
.gitignore syntax-check: Remove empty lines at the end of file 2015-02-02 15:07:56 +01:00
autogen.sh Use external libgsystem 2014.2 2014-04-04 16:52:37 -04:00
cfg.mk syntax-check: Remove empty lines at the end of file 2015-02-02 15:07:56 +01:00
configure.ac configure.ac: Enable option subdir-objects for automake 2015-02-02 17:15:35 +01:00
COPYING COPYING: Update to latest FSF with current address 2014-01-16 10:22:30 -05:00
GNUmakefile Add infrastructure for "make syntax-check" 2015-01-30 15:27:36 +01:00
maint.mk Add infrastructure for "make syntax-check" 2015-01-30 15:27:36 +01:00
Makefile-boot.am syntax-check: Remove empty lines at the end of file 2015-02-02 15:07:56 +01:00
Makefile-decls.am libostree: Add initial GRUB2 support 2014-10-16 14:15:00 -04:00
Makefile-libostree-defines.am Add an OstreeSysrootUpgrader API 2014-03-24 18:08:22 -04:00
Makefile-libostree.am Fix make distcheck 2015-01-30 15:27:36 +01:00
Makefile-ostree.am admin: Add set-origin command 2015-01-19 13:55:20 -05:00
Makefile-otutil.am Extract opendirat() helper function into libotutil 2014-09-16 11:34:39 -04:00
Makefile-switchroot.am Add support for mkinitcpio 2013-10-24 14:27:49 -04:00
Makefile-tests.am tests: Add tests for ot-unix-utils 2015-02-02 17:42:41 +01:00
Makefile.am tests: Move test-varint and test-rollsum under "make check" 2015-02-02 17:14:52 +01:00
ostree.doap doap category infrastructure 2014-07-31 11:26:32 +02:00
README-historical.md README: Just link to wiki, move most of it to README-historical.md 2014-01-20 18:00:09 -05:00
README.md README.md: Add a quick blurb on style 2014-12-07 17:19:42 -05:00
TODO Fix repeated words. 2015-01-30 15:27:36 +01:00

OSTree is a tool for managing bootable, immutable, versioned filesystem trees. While it takes over some of the roles of tradtional "package managers" like dpkg and rpm, it is not a package system; nor is it a tool for managing full disk images. Instead, it sits between those levels, offering a blend of the advantages (and disadvantages) of both.

For more information, see:

https://live.gnome.org/Projects/OSTree

Submitting patches

You can:

  1. Send mail to ostree-list@gnome.org, with the patch attached
  2. Submit a pull request against https://github.com/GNOME/ostree
  3. Attach them to https://bugzilla.gnome.org/

Please look at "git log" and match the commit log style.

Running the test suite

Currently, ostree uses https://wiki.gnome.org/GnomeGoals/InstalledTests To run just ostree's tests:

./configure ... --enable-installed-tests
gnome-desktop-testing-runner -p 0 ostree/

Coding style

Indentation is GNU. Files should start with the appropriate mode lines.

Use GCC __attribute__((cleanup)) wherever possible. If interacting with a third party library, try defining local cleanup macros.

Use GError and GCancellable where appropriate.

Prefer returning gboolean to signal success/failure, and have output values as parameters.

Prefer linear control flow inside functions (aside from standard loops). In other words, avoid "early exits" or use of goto besides goto out;.

This is an example of an "early exit":

static gboolean
myfunc (...)
{
    gboolean ret = FALSE;

    /* some code */

    /* some more code */

    if (condition)
      return FALSE;

    /* some more code */

    ret = TRUE;
  out:
    return ret;
}

If you must shortcut, use:

if (condition)
  {
    ret = TRUE;
    goto out;
  }

A consequence of this restriction is that you are encouraged to avoid deep nesting of loops or conditionals. Create internal static helper functions, particularly inside loops. For example, rather than:

while (condition)
  {
    /* some code */
    if (condition)
      {
         for (i = 0; i < somevalue; i++)
           {
              if (condition)
                {
                  /* deeply nested code */
                }

                /* more nested code */
           }
      }
  }

Instead do this:

static gboolean
helperfunc (..., GError **error)
{
  if (condition)
   {
     /* deeply nested code */
   }

  /* more nested code */

  return ret;
}

while (condition)
  {
    /* some code */
    if (!condition)
      continue;

    for (i = 0; i < somevalue; i++)
      {
        if (!helperfunc (..., i, error))
          goto out;
      }
  }