From 035552a858f562872d9c47809606fbe329106030 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Fri, 26 Jan 2018 14:26:25 -0600 Subject: [PATCH 1/2] Add version info for software library and on-disk structures An annoying part of filesystems is that the software library can change independently of the on-disk structures. For this reason versioning is very important, and must be handled separately for the software and on-disk parts. In this patch, littlefs provides two version numbers at compile time, with major and minor parts, in the form of 6 macros. LFS_VERSION // Library version, uint32_t encoded LFS_VERSION_MAJOR // Major - Backwards incompatible changes LFS_VERSION_MINOR // Minor - Feature additions LFS_DISK_VERSION // On-disk version, uint32_t encoded LFS_DISK_VERSION_MAJOR // Major - Backwards incompatible changes LFS_DISK_VERSION_MINOR // Minor - Feature additions Note that littlefs will error if it finds a major version number that is different, or a minor version number that has regressed. --- lfs.c | 11 ++++++----- lfs.h | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lfs.c b/lfs.c index ff4d1da..4f75989 100644 --- a/lfs.c +++ b/lfs.c @@ -2067,7 +2067,7 @@ int lfs_format(lfs_t *lfs, const struct lfs_config *cfg) { .d.type = LFS_TYPE_SUPERBLOCK, .d.elen = sizeof(superblock.d) - sizeof(superblock.d.magic) - 4, .d.nlen = sizeof(superblock.d.magic), - .d.version = 0x00010001, + .d.version = LFS_DISK_VERSION, .d.magic = {"littlefs"}, .d.block_size = lfs->cfg->block_size, .d.block_count = lfs->cfg->block_count, @@ -2140,10 +2140,11 @@ int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) { return LFS_ERR_CORRUPT; } - if (superblock.d.version > (0x00010001 | 0x0000ffff)) { - LFS_ERROR("Invalid version %d.%d", - 0xffff & (superblock.d.version >> 16), - 0xffff & (superblock.d.version >> 0)); + uint16_t major_version = (0xffff & (superblock.d.version >> 16)); + uint16_t minor_version = (0xffff & (superblock.d.version >> 0)); + if ((major_version != LFS_DISK_VERSION_MAJOR || + minor_version > LFS_DISK_VERSION_MINOR)) { + LFS_ERROR("Invalid version %d.%d", major_version, minor_version); return LFS_ERR_INVAL; } diff --git a/lfs.h b/lfs.h index e85780a..c9ff0ad 100644 --- a/lfs.h +++ b/lfs.h @@ -22,6 +22,23 @@ #include +/// Version info /// + +// Software library version +// Major (top-nibble), incremented on backwards incompatible changes +// Minor (bottom-nibble), incremented on feature additions +#define LFS_VERSION 0x00010002 +#define LFS_VERSION_MAJOR (0xffff & (LFS_VERSION >> 16)) +#define LFS_VERSION_MINOR (0xffff & (LFS_VERSION >> 0)) + +// Version of On-disk data structures +// Major (top-nibble), incremented on backwards incompatible changes +// Minor (bottom-nibble), incremented on feature additions +#define LFS_DISK_VERSION 0x00010001 +#define LFS_DISK_VERSION_MAJOR (0xffff & (LFS_DISK_VERSION >> 16)) +#define LFS_DISK_VERSION_MINOR (0xffff & (LFS_DISK_VERSION >> 0)) + + /// Definitions /// // Type definitions From 5a38d00dde905dc91ef97b4122c4a60e37c18472 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Sun, 28 Jan 2018 11:00:59 -0600 Subject: [PATCH 2/2] Added deploy step in Travis to push new version as tags --- .travis.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/.travis.yml b/.travis.yml index eb904c9..eea6601 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,3 +45,31 @@ before_script: - sudo chmod a+rw /dev/loop0 - dd if=/dev/zero bs=512 count=2048 of=disk - losetup /dev/loop0 disk + +deploy: + # Let before_deploy take over + provider: script + script: 'true' + on: + branch: master + +before_deploy: + - cd $TRAVIS_BUILD_DIR + # Update tag for version defined in lfs.h + - LFS_VERSION=$(grep -ox '#define LFS_VERSION .*' lfs.h | cut -d ' ' -f3) + - LFS_VERSION_MAJOR=$((0xffff & ($LFS_VERSION >> 16))) + - LFS_VERSION_MINOR=$((0xffff & ($LFS_VERSION >> 0))) + - LFS_VERSION="v$LFS_VERSION_MAJOR.$LFS_VERSION_MINOR" + - | + curl -u $GEKY_BOT -X POST \ + https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs \ + -d @- <<< "{ + \"ref\": \"refs/tags/$LFS_VERSION\", + \"sha\": \"$TRAVIS_COMMIT\" + }" + - | + curl -f -u $GEKY_BOT -X PATCH \ + https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs/tags/$LFS_VERSION \ + -d @- <<< "{ + \"sha\": \"$TRAVIS_COMMIT\" + }"