Repository: openlawlibrary/taf (language: python)

Issue:
Snapshot update does not include `root.json`

Snapshot update does not include `root.json`



Discussion / hints:

Fix patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e68422be..e9e6d466 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,10 +18,14 @@ and this project adheres to [Semantic Versioning][semver].
 ### Fixed
 
 - Fix pygit2 performance regression ([283])
+- Fix `taf metadata update-expiration-date --role snapshot` to include `root` ([282])
+- Fix `all_commits_since_commit` to validate provided commit ([278])
+- Remove pin for `PyOpenSSL` ([273])
 - Fix `all_commits_since_commit` to validate provided commit ([278])
 - Remove pin for `PyOpenSSL` ([273])
 
 [283]: https://github.com/openlawlibrary/taf/pull/283
+[282]: https://github.com/openlawlibrary/taf/pull/282
 [279]: https://github.com/openlawlibrary/taf/pull/279
 [278]: https://github.com/openlawlibrary/taf/pull/278
 [275]: https://github.com/openlawlibrary/taf/pull/275
diff --git a/setup.py b/setup.py
index d49059ac..b012b6a4 100644
--- a/setup.py
+++ b/setup.py
@@ -64,7 +64,7 @@ def finalize_options(self):
     "install_requires": [
         "click==7.*",
         "colorama>=0.3.9",
-        "oll-tuf==0.20.0.dev1",
+        "oll-tuf==0.20.0.dev2",
         "cryptography>=37.0.0",
         "loguru==0.6.*",
         "pygit2==1.9.*",


Test patch:
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/COMMIT_EDITMSG b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/COMMIT_EDITMSG
new file mode 100644
index 00000000..3122ba67
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/COMMIT_EDITMSG
@@ -0,0 +1,1 @@
+Updated file3 again
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/HEAD b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/HEAD
new file mode 100644
index 00000000..cb089cd8
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/HEAD
@@ -0,0 +1,1 @@
+ref: refs/heads/master
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/ORIG_HEAD b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/ORIG_HEAD
new file mode 100644
index 00000000..f477082e
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/ORIG_HEAD
@@ -0,0 +1,1 @@
+f724551bff06e7eedc432f4fc7e07ca3b3fe4203
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/config b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/config
new file mode 100644
index 00000000..8ad0b1ba
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/config
@@ -0,0 +1,6 @@
+[core]
+	repositoryformatversion = 0
+	filemode = false
+	bare = false
+	logallrefupdates = true
+	ignorecase = true
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/description b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/description
new file mode 100644
index 00000000..498b267a
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/description
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/applypatch-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/applypatch-msg.sample
new file mode 100644
index 00000000..a5d7b84a
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/applypatch-msg.sample
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
+test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
+:
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/commit-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/commit-msg.sample
new file mode 100644
index 00000000..b58d1184
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/commit-msg.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/fsmonitor-watchman.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/fsmonitor-watchman.sample
new file mode 100644
index 00000000..e673bb39
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/fsmonitor-watchman.sample
@@ -0,0 +1,114 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use IPC::Open2;
+
+# An example hook script to integrate Watchman
+# (https://facebook.github.io/watchman/) with git to speed up detecting
+# new and modified files.
+#
+# The hook is passed a version (currently 1) and a time in nanoseconds
+# formatted as a string and outputs to stdout all files that have been
+# modified since the given time. Paths must be relative to the root of
+# the working tree and separated by a single NUL.
+#
+# To enable this hook, rename this file to "query-watchman" and set
+# 'git config core.fsmonitor .git/hooks/query-watchman'
+#
+my ($version, $time) = @ARGV;
+
+# Check the hook interface version
+
+if ($version == 1) {
+	# convert nanoseconds to seconds
+	$time = int $time / 1000000000;
+} else {
+	die "Unsupported query-fsmonitor hook version '$version'.\n" .
+	    "Falling back to scanning...\n";
+}
+
+my $git_work_tree;
+if ($^O =~ 'msys' || $^O =~ 'cygwin') {
+	$git_work_tree = Win32::GetCwd();
+	$git_work_tree =~ tr/\\/\//;
+} else {
+	require Cwd;
+	$git_work_tree = Cwd::cwd();
+}
+
+my $retry = 1;
+
+launch_watchman();
+
+sub launch_watchman {
+
+	my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty')
+	    or die "open2() failed: $!\n" .
+	    "Falling back to scanning...\n";
+
+	# In the query expression below we're asking for names of files that
+	# changed since $time but were not transient (ie created after
+	# $time but no longer exist).
+	#
+	# To accomplish this, we're using the "since" generator to use the
+	# recency index to select candidate nodes and "fields" to limit the
+	# output to file names only. Then we're using the "expression" term to
+	# further constrain the results.
+	#
+	# The category of transient files that we want to ignore will have a
+	# creation clock (cclock) newer than $time_t value and will also not
+	# currently exist.
+
+	my $query = <<"	END";
+		["query", "$git_work_tree", {
+			"since": $time,
+			"fields": ["name"],
+			"expression": ["not", ["allof", ["since", $time, "cclock"], ["not", "exists"]]]
+		}]
+	END
+
+	print CHLD_IN $query;
+	close CHLD_IN;
+	my $response = do {local $/; <CHLD_OUT>};
+
+	die "Watchman: command returned no output.\n" .
+	    "Falling back to scanning...\n" if $response eq "";
+	die "Watchman: command returned invalid output: $response\n" .
+	    "Falling back to scanning...\n" unless $response =~ /^\{/;
+
+	my $json_pkg;
+	eval {
+		require JSON::XS;
+		$json_pkg = "JSON::XS";
+		1;
+	} or do {
+		require JSON::PP;
+		$json_pkg = "JSON::PP";
+	};
+
+	my $o = $json_pkg->new->utf8->decode($response);
+
+	if ($retry > 0 and $o->{error} and $o->{error} =~ m/unable to resolve root .* directory (.*) is not watched/) {
+		print STDERR "Adding '$git_work_tree' to watchman's watch list.\n";
+		$retry--;
+		qx/watchman watch "$git_work_tree"/;
+		die "Failed to make watchman watch '$git_work_tree'.\n" .
+		    "Falling back to scanning...\n" if $? != 0;
+
+		# Watchman will always return all files on the first query so
+		# return the fast "everything is dirty" flag to git and do the
+		# Watchman query just to get it over with now so we won't pay
+		# the cost in git to look up each individual file.
+		print "/\0";
+		eval { launch_watchman() };
+		exit 0;
+	}
+
+	die "Watchman: $o->{error}.\n" .
+	    "Falling back to scanning...\n" if $o->{error};
+
+	binmode STDOUT, ":utf8";
+	local $, = "\0";
+	print @{$o->{files}};
+}
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/post-update.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/post-update.sample
new file mode 100644
index 00000000..ec17ec19
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/post-update.sample
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-applypatch.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-applypatch.sample
new file mode 100644
index 00000000..4142082b
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-applypatch.sample
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+precommit="$(git rev-parse --git-path hooks/pre-commit)"
+test -x "$precommit" && exec "$precommit" ${1+"$@"}
+:
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-commit.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-commit.sample
new file mode 100644
index 00000000..68d62d54
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-commit.sample
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ASCII filenames set this variable to true.
+allownonascii=$(git config --bool hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ASCII filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	cat <<\EOF
+Error: Attempt to add a non-ASCII file name.
+
+This can cause problems if you want to work with people on other platforms.
+
+To be portable it is advisable to rename the file.
+
+If you know what you are doing you can disable this check using:
+
+  git config hooks.allownonascii true
+EOF
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-push.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-push.sample
new file mode 100644
index 00000000..6187dbf4
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-push.sample
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+# An example hook script to verify what is about to be pushed.  Called by "git
+# push" after it has checked the remote status, but before anything has been
+# pushed.  If this script exits with a non-zero status nothing will be pushed.
+#
+# This hook is called with the following parameters:
+#
+# $1 -- Name of the remote to which the push is being done
+# $2 -- URL to which the push is being done
+#
+# If pushing without using a named remote those arguments will be equal.
+#
+# Information about the commits which are being pushed is supplied as lines to
+# the standard input in the form:
+#
+#   <local ref> <local sha1> <remote ref> <remote sha1>
+#
+# This sample shows how to prevent push of commits where the log message starts
+# with "WIP" (work in progress).
+
+remote="$1"
+url="$2"
+
+z40=0000000000000000000000000000000000000000
+
+while read local_ref local_sha remote_ref remote_sha
+do
+	if [ "$local_sha" = $z40 ]
+	then
+		# Handle delete
+		:
+	else
+		if [ "$remote_sha" = $z40 ]
+		then
+			# New branch, examine all commits
+			range="$local_sha"
+		else
+			# Update to existing branch, examine new commits
+			range="$remote_sha..$local_sha"
+		fi
+
+		# Check for WIP commit
+		commit=`git rev-list -n 1 --grep '^WIP' "$range"`
+		if [ -n "$commit" ]
+		then
+			echo >&2 "Found WIP commit in $local_ref, not pushing"
+			exit 1
+		fi
+	fi
+done
+
+exit 0
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-rebase.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-rebase.sample
new file mode 100644
index 00000000..6cbef5c3
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-rebase.sample
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up to date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-receive.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-receive.sample
new file mode 100644
index 00000000..a1fd29ec
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/pre-receive.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to make use of push options.
+# The example simply echoes all push options that start with 'echoback='
+# and rejects all pushes when the "reject" push option is used.
+#
+# To enable this hook, rename this file to "pre-receive".
+
+if test -n "$GIT_PUSH_OPTION_COUNT"
+then
+	i=0
+	while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
+	do
+		eval "value=\$GIT_PUSH_OPTION_$i"
+		case "$value" in
+		echoback=*)
+			echo "echo from the pre-receive-hook: ${value#*=}" >&2
+			;;
+		reject)
+			exit 1
+		esac
+		i=$((i + 1))
+	done
+fi
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/prepare-commit-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/prepare-commit-msg.sample
new file mode 100644
index 00000000..10fa14c5
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/prepare-commit-msg.sample
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples. The first one removes the
+# "# Please enter the commit message..." help message.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+COMMIT_MSG_FILE=$1
+COMMIT_SOURCE=$2
+SHA1=$3
+
+/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
+
+# case "$COMMIT_SOURCE,$SHA1" in
+#  ,|template,)
+#    /usr/bin/perl -i.bak -pe '
+#       print "\n" . `git diff --cached --name-status -r`
+# 	 if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
+#  *) ;;
+# esac
+
+# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
+# if test -z "$COMMIT_SOURCE"
+# then
+#   /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
+# fi
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/update.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/update.sample
new file mode 100644
index 00000000..80ba9413
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/hooks/update.sample
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to block unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/index b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/index
new file mode 100644
index 00000000..8dc370c0
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/index differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/info/exclude b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/info/exclude
new file mode 100644
index 00000000..a5196d1b
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/info/exclude
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/logs/HEAD b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/logs/HEAD
new file mode 100644
index 00000000..df7cffab
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/logs/HEAD
@@ -0,0 +1,7 @@
+0000000000000000000000000000000000000000 c1ecc553f4318637b40fa04032d94a64d3080ea4 Renata <vrenata8@gmail.com> 1559986692 +0200	commit (initial): Initial test files
+c1ecc553f4318637b40fa04032d94a64d3080ea4 bbd3170a8b88b8e454bf3722343bb4a2835a6cce Renata <vrenata8@gmail.com> 1560358832 +0200	commit: Updated file 1
+bbd3170a8b88b8e454bf3722343bb4a2835a6cce f724551bff06e7eedc432f4fc7e07ca3b3fe4203 Renata <vrenata8@gmail.com> 1560359301 +0200	commit: Updated file1
+f724551bff06e7eedc432f4fc7e07ca3b3fe4203 c1ecc553f4318637b40fa04032d94a64d3080ea4 Renata <vrenata8@gmail.com> 1560433371 +0200	reset: moving to HEAD~2
+c1ecc553f4318637b40fa04032d94a64d3080ea4 22030c3a7c7f80814c3e1a0b35b4cf133de8764e Renata <vrenata8@gmail.com> 1560524535 +0200	commit: Updated file 1
+22030c3a7c7f80814c3e1a0b35b4cf133de8764e 841ea504c1748bdf888387d84c93e7a7d1ac2274 Renata <vrenata8@gmail.com> 1560525745 +0200	commit: Updated file 2
+841ea504c1748bdf888387d84c93e7a7d1ac2274 b047c591809362a0b155d18839df22acb9c4c409 Renata <vrenata8@gmail.com> 1560525981 +0200	commit: Updated file3 again
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/logs/refs/heads/master b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/logs/refs/heads/master
new file mode 100644
index 00000000..df7cffab
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/logs/refs/heads/master
@@ -0,0 +1,7 @@
+0000000000000000000000000000000000000000 c1ecc553f4318637b40fa04032d94a64d3080ea4 Renata <vrenata8@gmail.com> 1559986692 +0200	commit (initial): Initial test files
+c1ecc553f4318637b40fa04032d94a64d3080ea4 bbd3170a8b88b8e454bf3722343bb4a2835a6cce Renata <vrenata8@gmail.com> 1560358832 +0200	commit: Updated file 1
+bbd3170a8b88b8e454bf3722343bb4a2835a6cce f724551bff06e7eedc432f4fc7e07ca3b3fe4203 Renata <vrenata8@gmail.com> 1560359301 +0200	commit: Updated file1
+f724551bff06e7eedc432f4fc7e07ca3b3fe4203 c1ecc553f4318637b40fa04032d94a64d3080ea4 Renata <vrenata8@gmail.com> 1560433371 +0200	reset: moving to HEAD~2
+c1ecc553f4318637b40fa04032d94a64d3080ea4 22030c3a7c7f80814c3e1a0b35b4cf133de8764e Renata <vrenata8@gmail.com> 1560524535 +0200	commit: Updated file 1
+22030c3a7c7f80814c3e1a0b35b4cf133de8764e 841ea504c1748bdf888387d84c93e7a7d1ac2274 Renata <vrenata8@gmail.com> 1560525745 +0200	commit: Updated file 2
+841ea504c1748bdf888387d84c93e7a7d1ac2274 b047c591809362a0b155d18839df22acb9c4c409 Renata <vrenata8@gmail.com> 1560525981 +0200	commit: Updated file3 again
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/16/28fc827c8de3cc82d5f76c97e4ede0fdf25970 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/16/28fc827c8de3cc82d5f76c97e4ede0fdf25970
new file mode 100644
index 00000000..44b87c05
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/16/28fc827c8de3cc82d5f76c97e4ede0fdf25970 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/22/030c3a7c7f80814c3e1a0b35b4cf133de8764e b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/22/030c3a7c7f80814c3e1a0b35b4cf133de8764e
new file mode 100644
index 00000000..6464e8c2
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/22/030c3a7c7f80814c3e1a0b35b4cf133de8764e differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/3d/2bcf0dabaaa3f10323d1b56ed2ed3a3f4fc9bd b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/3d/2bcf0dabaaa3f10323d1b56ed2ed3a3f4fc9bd
new file mode 100644
index 00000000..14c79b16
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/3d/2bcf0dabaaa3f10323d1b56ed2ed3a3f4fc9bd differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/74/4fe0b351f9ab576ae0d20968bf6ceb0976a691 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/74/4fe0b351f9ab576ae0d20968bf6ceb0976a691
new file mode 100644
index 00000000..4c0f1384
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/74/4fe0b351f9ab576ae0d20968bf6ceb0976a691 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/76/497fdc0dec30958a35bea267862c4d7f56647f b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/76/497fdc0dec30958a35bea267862c4d7f56647f
new file mode 100644
index 00000000..4ebd6f21
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/76/497fdc0dec30958a35bea267862c4d7f56647f differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/84/1ea504c1748bdf888387d84c93e7a7d1ac2274 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/84/1ea504c1748bdf888387d84c93e7a7d1ac2274
new file mode 100644
index 00000000..823a7486
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/84/1ea504c1748bdf888387d84c93e7a7d1ac2274 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/86/eebb3a3703d0b9259ec0eb4843c1ccf8e8077a b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/86/eebb3a3703d0b9259ec0eb4843c1ccf8e8077a
new file mode 100644
index 00000000..efa3c378
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/86/eebb3a3703d0b9259ec0eb4843c1ccf8e8077a
@@ -0,0 +1,1 @@
+x%���0y3�W@<`hQ*"�M����	E��>�c���X���B�J��a���>��uj�m����T\��܋l(���� �
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/9d/22333b71737d2a8998f4d0dd0ae791fcf8b103 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/9d/22333b71737d2a8998f4d0dd0ae791fcf8b103
new file mode 100644
index 00000000..639667df
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/9d/22333b71737d2a8998f4d0dd0ae791fcf8b103 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/9d/bd9258ba353523b4f09f78361570d0d9238aaf b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/9d/bd9258ba353523b4f09f78361570d0d9238aaf
new file mode 100644
index 00000000..342a8d00
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/9d/bd9258ba353523b4f09f78361570d0d9238aaf differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/a3/75263bd2344da4b3dc767f3e35e8b3c436a403 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/a3/75263bd2344da4b3dc767f3e35e8b3c436a403
new file mode 100644
index 00000000..54149b7f
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/a3/75263bd2344da4b3dc767f3e35e8b3c436a403 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/b0/47c591809362a0b155d18839df22acb9c4c409 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/b0/47c591809362a0b155d18839df22acb9c4c409
new file mode 100644
index 00000000..929338f1
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/b0/47c591809362a0b155d18839df22acb9c4c409 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/b9/b40b3e7159902e794ed7db244b2cf55b30a568 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/b9/b40b3e7159902e794ed7db244b2cf55b30a568
new file mode 100644
index 00000000..19010f62
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/b9/b40b3e7159902e794ed7db244b2cf55b30a568 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/bb/d3170a8b88b8e454bf3722343bb4a2835a6cce b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/bb/d3170a8b88b8e454bf3722343bb4a2835a6cce
new file mode 100644
index 00000000..af719c04
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/bb/d3170a8b88b8e454bf3722343bb4a2835a6cce differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/c1/ecc553f4318637b40fa04032d94a64d3080ea4 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/c1/ecc553f4318637b40fa04032d94a64d3080ea4
new file mode 100644
index 00000000..ac48d69d
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/c1/ecc553f4318637b40fa04032d94a64d3080ea4
@@ -0,0 +1,1 @@
+x��I��@�s�W�%�i6K�(�f0�`�[c������}��r�%�T��R�^ϧ��$+_汮���K��x(JXeIn`�Z)�Q�8Ƞe~?� �{4#�}?����ߎ�����V��-X��8�Aas��6|������L��A` vl_}K"�3�$4j��V1M�MbyC��V.��.Ti�{�C�R�]��:�¿�qhekذ�%�ᝊ�*��hz;Q6��)~%�R5N�.��_c������@'�w�']�����2m��6L��W�׾)�4�u9"�o+�ct��:��{wd�:[�`�>���꽠�(��=:w���]&[Wg��kB}���1O;S�e� �Ӡ����1/8��_��u-��Af)�ȥb��:��WQ:!�݂����A9�I�@��.D�9���U��tM�����(�2���0�JP܂�����ԦM�m�Q�?:��Tr\�J�^^�<)���\Y:�<���x��2V5}�_�2NOf�(��i����.���
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/c5/d432429b7a0161f151317cfa6da04d7b8a4b60 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/c5/d432429b7a0161f151317cfa6da04d7b8a4b60
new file mode 100644
index 00000000..db45f8bc
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/c5/d432429b7a0161f151317cfa6da04d7b8a4b60 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/c6/f787e7e67df73f8d5ce5e945af8aef1c71f154 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/c6/f787e7e67df73f8d5ce5e945af8aef1c71f154
new file mode 100644
index 00000000..9c20be51
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/c6/f787e7e67df73f8d5ce5e945af8aef1c71f154
@@ -0,0 +1,2 @@
+x�Q
+� D��s��>�GXs�uE7���03�Ǹ��\�4�4M�Jdw�c�[���iOzk6��@�b6<'����O�~�|�#�
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/d5/39d29be5cbf2073a9b5f8ab55792d764a15005 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/d5/39d29be5cbf2073a9b5f8ab55792d764a15005
new file mode 100644
index 00000000..8904e790
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/d5/39d29be5cbf2073a9b5f8ab55792d764a15005 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/dc/a3a71926e6985b004690d3f3cbca99632d951e b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/dc/a3a71926e6985b004690d3f3cbca99632d951e
new file mode 100644
index 00000000..967889e8
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/dc/a3a71926e6985b004690d3f3cbca99632d951e differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/e9/00725bc7f886b24dc284739be009c4668282c0 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/e9/00725bc7f886b24dc284739be009c4668282c0
new file mode 100644
index 00000000..12e701c0
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/e9/00725bc7f886b24dc284739be009c4668282c0 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/f7/24551bff06e7eedc432f4fc7e07ca3b3fe4203 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/f7/24551bff06e7eedc432f4fc7e07ca3b3fe4203
new file mode 100644
index 00000000..74429630
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/objects/f7/24551bff06e7eedc432f4fc7e07ca3b3fe4203 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/refs/heads/master b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/refs/heads/master
new file mode 100644
index 00000000..0fd31168
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/git/refs/heads/master
@@ -0,0 +1,1 @@
+b047c591809362a0b155d18839df22acb9c4c409
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/repo1_file1.txt b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/repo1_file1.txt
new file mode 100644
index 00000000..744fe0b3
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/repo1_file1.txt
@@ -0,0 +1,2 @@
+This is some example text of file 1 of repo 1
+Updated text
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/repo1_file2.txt b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/repo1_file2.txt
new file mode 100644
index 00000000..1628fc82
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/repo1_file2.txt
@@ -0,0 +1,2 @@
+This is some example text of file 2 of repo 1
+More text
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/repo1_file3.txt b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/repo1_file3.txt
new file mode 100644
index 00000000..c6f787e7
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo1/repo1_file3.txt
@@ -0,0 +1,2 @@
+This is some example text of file 3 of repo 1
+This file contains a little bit more updated text
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/COMMIT_EDITMSG b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/COMMIT_EDITMSG
new file mode 100644
index 00000000..8fe4a183
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/COMMIT_EDITMSG
@@ -0,0 +1,1 @@
+Updated file2
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/HEAD b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/HEAD
new file mode 100644
index 00000000..cb089cd8
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/HEAD
@@ -0,0 +1,1 @@
+ref: refs/heads/master
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/ORIG_HEAD b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/ORIG_HEAD
new file mode 100644
index 00000000..041c364c
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/ORIG_HEAD
@@ -0,0 +1,1 @@
+3a9c6c6145cd7d8e2beefd5e18335b023e260492
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/config b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/config
new file mode 100644
index 00000000..8ad0b1ba
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/config
@@ -0,0 +1,6 @@
+[core]
+	repositoryformatversion = 0
+	filemode = false
+	bare = false
+	logallrefupdates = true
+	ignorecase = true
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/description b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/description
new file mode 100644
index 00000000..498b267a
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/description
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/applypatch-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/applypatch-msg.sample
new file mode 100644
index 00000000..a5d7b84a
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/applypatch-msg.sample
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
+test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
+:
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/commit-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/commit-msg.sample
new file mode 100644
index 00000000..b58d1184
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/commit-msg.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/fsmonitor-watchman.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/fsmonitor-watchman.sample
new file mode 100644
index 00000000..e673bb39
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/fsmonitor-watchman.sample
@@ -0,0 +1,114 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use IPC::Open2;
+
+# An example hook script to integrate Watchman
+# (https://facebook.github.io/watchman/) with git to speed up detecting
+# new and modified files.
+#
+# The hook is passed a version (currently 1) and a time in nanoseconds
+# formatted as a string and outputs to stdout all files that have been
+# modified since the given time. Paths must be relative to the root of
+# the working tree and separated by a single NUL.
+#
+# To enable this hook, rename this file to "query-watchman" and set
+# 'git config core.fsmonitor .git/hooks/query-watchman'
+#
+my ($version, $time) = @ARGV;
+
+# Check the hook interface version
+
+if ($version == 1) {
+	# convert nanoseconds to seconds
+	$time = int $time / 1000000000;
+} else {
+	die "Unsupported query-fsmonitor hook version '$version'.\n" .
+	    "Falling back to scanning...\n";
+}
+
+my $git_work_tree;
+if ($^O =~ 'msys' || $^O =~ 'cygwin') {
+	$git_work_tree = Win32::GetCwd();
+	$git_work_tree =~ tr/\\/\//;
+} else {
+	require Cwd;
+	$git_work_tree = Cwd::cwd();
+}
+
+my $retry = 1;
+
+launch_watchman();
+
+sub launch_watchman {
+
+	my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty')
+	    or die "open2() failed: $!\n" .
+	    "Falling back to scanning...\n";
+
+	# In the query expression below we're asking for names of files that
+	# changed since $time but were not transient (ie created after
+	# $time but no longer exist).
+	#
+	# To accomplish this, we're using the "since" generator to use the
+	# recency index to select candidate nodes and "fields" to limit the
+	# output to file names only. Then we're using the "expression" term to
+	# further constrain the results.
+	#
+	# The category of transient files that we want to ignore will have a
+	# creation clock (cclock) newer than $time_t value and will also not
+	# currently exist.
+
+	my $query = <<"	END";
+		["query", "$git_work_tree", {
+			"since": $time,
+			"fields": ["name"],
+			"expression": ["not", ["allof", ["since", $time, "cclock"], ["not", "exists"]]]
+		}]
+	END
+
+	print CHLD_IN $query;
+	close CHLD_IN;
+	my $response = do {local $/; <CHLD_OUT>};
+
+	die "Watchman: command returned no output.\n" .
+	    "Falling back to scanning...\n" if $response eq "";
+	die "Watchman: command returned invalid output: $response\n" .
+	    "Falling back to scanning...\n" unless $response =~ /^\{/;
+
+	my $json_pkg;
+	eval {
+		require JSON::XS;
+		$json_pkg = "JSON::XS";
+		1;
+	} or do {
+		require JSON::PP;
+		$json_pkg = "JSON::PP";
+	};
+
+	my $o = $json_pkg->new->utf8->decode($response);
+
+	if ($retry > 0 and $o->{error} and $o->{error} =~ m/unable to resolve root .* directory (.*) is not watched/) {
+		print STDERR "Adding '$git_work_tree' to watchman's watch list.\n";
+		$retry--;
+		qx/watchman watch "$git_work_tree"/;
+		die "Failed to make watchman watch '$git_work_tree'.\n" .
+		    "Falling back to scanning...\n" if $? != 0;
+
+		# Watchman will always return all files on the first query so
+		# return the fast "everything is dirty" flag to git and do the
+		# Watchman query just to get it over with now so we won't pay
+		# the cost in git to look up each individual file.
+		print "/\0";
+		eval { launch_watchman() };
+		exit 0;
+	}
+
+	die "Watchman: $o->{error}.\n" .
+	    "Falling back to scanning...\n" if $o->{error};
+
+	binmode STDOUT, ":utf8";
+	local $, = "\0";
+	print @{$o->{files}};
+}
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/post-update.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/post-update.sample
new file mode 100644
index 00000000..ec17ec19
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/post-update.sample
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-applypatch.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-applypatch.sample
new file mode 100644
index 00000000..4142082b
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-applypatch.sample
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+precommit="$(git rev-parse --git-path hooks/pre-commit)"
+test -x "$precommit" && exec "$precommit" ${1+"$@"}
+:
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-commit.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-commit.sample
new file mode 100644
index 00000000..68d62d54
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-commit.sample
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ASCII filenames set this variable to true.
+allownonascii=$(git config --bool hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ASCII filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	cat <<\EOF
+Error: Attempt to add a non-ASCII file name.
+
+This can cause problems if you want to work with people on other platforms.
+
+To be portable it is advisable to rename the file.
+
+If you know what you are doing you can disable this check using:
+
+  git config hooks.allownonascii true
+EOF
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-push.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-push.sample
new file mode 100644
index 00000000..6187dbf4
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-push.sample
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+# An example hook script to verify what is about to be pushed.  Called by "git
+# push" after it has checked the remote status, but before anything has been
+# pushed.  If this script exits with a non-zero status nothing will be pushed.
+#
+# This hook is called with the following parameters:
+#
+# $1 -- Name of the remote to which the push is being done
+# $2 -- URL to which the push is being done
+#
+# If pushing without using a named remote those arguments will be equal.
+#
+# Information about the commits which are being pushed is supplied as lines to
+# the standard input in the form:
+#
+#   <local ref> <local sha1> <remote ref> <remote sha1>
+#
+# This sample shows how to prevent push of commits where the log message starts
+# with "WIP" (work in progress).
+
+remote="$1"
+url="$2"
+
+z40=0000000000000000000000000000000000000000
+
+while read local_ref local_sha remote_ref remote_sha
+do
+	if [ "$local_sha" = $z40 ]
+	then
+		# Handle delete
+		:
+	else
+		if [ "$remote_sha" = $z40 ]
+		then
+			# New branch, examine all commits
+			range="$local_sha"
+		else
+			# Update to existing branch, examine new commits
+			range="$remote_sha..$local_sha"
+		fi
+
+		# Check for WIP commit
+		commit=`git rev-list -n 1 --grep '^WIP' "$range"`
+		if [ -n "$commit" ]
+		then
+			echo >&2 "Found WIP commit in $local_ref, not pushing"
+			exit 1
+		fi
+	fi
+done
+
+exit 0
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-rebase.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-rebase.sample
new file mode 100644
index 00000000..6cbef5c3
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-rebase.sample
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up to date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-receive.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-receive.sample
new file mode 100644
index 00000000..a1fd29ec
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/pre-receive.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to make use of push options.
+# The example simply echoes all push options that start with 'echoback='
+# and rejects all pushes when the "reject" push option is used.
+#
+# To enable this hook, rename this file to "pre-receive".
+
+if test -n "$GIT_PUSH_OPTION_COUNT"
+then
+	i=0
+	while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
+	do
+		eval "value=\$GIT_PUSH_OPTION_$i"
+		case "$value" in
+		echoback=*)
+			echo "echo from the pre-receive-hook: ${value#*=}" >&2
+			;;
+		reject)
+			exit 1
+		esac
+		i=$((i + 1))
+	done
+fi
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/prepare-commit-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/prepare-commit-msg.sample
new file mode 100644
index 00000000..10fa14c5
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/prepare-commit-msg.sample
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples. The first one removes the
+# "# Please enter the commit message..." help message.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+COMMIT_MSG_FILE=$1
+COMMIT_SOURCE=$2
+SHA1=$3
+
+/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
+
+# case "$COMMIT_SOURCE,$SHA1" in
+#  ,|template,)
+#    /usr/bin/perl -i.bak -pe '
+#       print "\n" . `git diff --cached --name-status -r`
+# 	 if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
+#  *) ;;
+# esac
+
+# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
+# if test -z "$COMMIT_SOURCE"
+# then
+#   /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
+# fi
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/update.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/update.sample
new file mode 100644
index 00000000..80ba9413
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/hooks/update.sample
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to block unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/index b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/index
new file mode 100644
index 00000000..5734a2a3
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/index differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/info/exclude b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/info/exclude
new file mode 100644
index 00000000..a5196d1b
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/info/exclude
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/logs/HEAD b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/logs/HEAD
new file mode 100644
index 00000000..7bc6b9dd
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/logs/HEAD
@@ -0,0 +1,6 @@
+0000000000000000000000000000000000000000 e48aa4cbe35328c6da2c2b0cc7fe24a4f5d7d125 Renata <vrenata8@gmail.com> 1559986797 +0200	commit (initial): Initial test files
+e48aa4cbe35328c6da2c2b0cc7fe24a4f5d7d125 00f7a8895f7fabda62b7d0fcee5b27b89094cbe9 Renata <vrenata8@gmail.com> 1560359233 +0200	commit: Updated file2
+00f7a8895f7fabda62b7d0fcee5b27b89094cbe9 3a9c6c6145cd7d8e2beefd5e18335b023e260492 Renata <vrenata8@gmail.com> 1560359372 +0200	commit: Added new file file3
+3a9c6c6145cd7d8e2beefd5e18335b023e260492 e48aa4cbe35328c6da2c2b0cc7fe24a4f5d7d125 Renata <vrenata8@gmail.com> 1560433380 +0200	reset: moving to HEAD~2
+e48aa4cbe35328c6da2c2b0cc7fe24a4f5d7d125 f63a454d65a492bfd1f51b3174391919d018ffcc Renata <vrenata8@gmail.com> 1560525784 +0200	commit: Updated file1
+f63a454d65a492bfd1f51b3174391919d018ffcc 916e3b7bee8868cc9ac378a11ab86cfed7012c77 Renata <vrenata8@gmail.com> 1560526012 +0200	commit: Updated file2
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/logs/refs/heads/master b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/logs/refs/heads/master
new file mode 100644
index 00000000..7bc6b9dd
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/logs/refs/heads/master
@@ -0,0 +1,6 @@
+0000000000000000000000000000000000000000 e48aa4cbe35328c6da2c2b0cc7fe24a4f5d7d125 Renata <vrenata8@gmail.com> 1559986797 +0200	commit (initial): Initial test files
+e48aa4cbe35328c6da2c2b0cc7fe24a4f5d7d125 00f7a8895f7fabda62b7d0fcee5b27b89094cbe9 Renata <vrenata8@gmail.com> 1560359233 +0200	commit: Updated file2
+00f7a8895f7fabda62b7d0fcee5b27b89094cbe9 3a9c6c6145cd7d8e2beefd5e18335b023e260492 Renata <vrenata8@gmail.com> 1560359372 +0200	commit: Added new file file3
+3a9c6c6145cd7d8e2beefd5e18335b023e260492 e48aa4cbe35328c6da2c2b0cc7fe24a4f5d7d125 Renata <vrenata8@gmail.com> 1560433380 +0200	reset: moving to HEAD~2
+e48aa4cbe35328c6da2c2b0cc7fe24a4f5d7d125 f63a454d65a492bfd1f51b3174391919d018ffcc Renata <vrenata8@gmail.com> 1560525784 +0200	commit: Updated file1
+f63a454d65a492bfd1f51b3174391919d018ffcc 916e3b7bee8868cc9ac378a11ab86cfed7012c77 Renata <vrenata8@gmail.com> 1560526012 +0200	commit: Updated file2
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/00/f7a8895f7fabda62b7d0fcee5b27b89094cbe9 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/00/f7a8895f7fabda62b7d0fcee5b27b89094cbe9
new file mode 100644
index 00000000..3aee5013
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/00/f7a8895f7fabda62b7d0fcee5b27b89094cbe9 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/2d/3c13fa1b386234b08e4afe2d9fb175ed2bbdb8 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/2d/3c13fa1b386234b08e4afe2d9fb175ed2bbdb8
new file mode 100644
index 00000000..087b472b
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/2d/3c13fa1b386234b08e4afe2d9fb175ed2bbdb8 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/2f/c534882a6cab95090cd440a26c94271da675fa b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/2f/c534882a6cab95090cd440a26c94271da675fa
new file mode 100644
index 00000000..09d13f56
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/2f/c534882a6cab95090cd440a26c94271da675fa differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/36/f02e24f3d87c214f1139250bce7310845f6228 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/36/f02e24f3d87c214f1139250bce7310845f6228
new file mode 100644
index 00000000..8a67ff64
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/36/f02e24f3d87c214f1139250bce7310845f6228 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/3a/9c6c6145cd7d8e2beefd5e18335b023e260492 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/3a/9c6c6145cd7d8e2beefd5e18335b023e260492
new file mode 100644
index 00000000..3caceda1
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/3a/9c6c6145cd7d8e2beefd5e18335b023e260492 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/40/a92f3894711962e2804a6181470b2fd5f21609 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/40/a92f3894711962e2804a6181470b2fd5f21609
new file mode 100644
index 00000000..a320e255
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/40/a92f3894711962e2804a6181470b2fd5f21609 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/41/58568dcd26c49162a7b58c6ba8c602ece92151 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/41/58568dcd26c49162a7b58c6ba8c602ece92151
new file mode 100644
index 00000000..f04c5be7
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/41/58568dcd26c49162a7b58c6ba8c602ece92151 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/41/7f4caee889564333a5af1a19f4b36acd79dcca b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/41/7f4caee889564333a5af1a19f4b36acd79dcca
new file mode 100644
index 00000000..131a0cd5
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/41/7f4caee889564333a5af1a19f4b36acd79dcca differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
new file mode 100644
index 00000000..adf64119
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/54/d9e398f3c8d1bd0a59e6e8607b7d5ebba2466f b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/54/d9e398f3c8d1bd0a59e6e8607b7d5ebba2466f
new file mode 100644
index 00000000..4855cdd6
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/54/d9e398f3c8d1bd0a59e6e8607b7d5ebba2466f differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/89/757187ac008f057b2710dffe8bf8d50ef274e2 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/89/757187ac008f057b2710dffe8bf8d50ef274e2
new file mode 100644
index 00000000..e450ad6a
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/89/757187ac008f057b2710dffe8bf8d50ef274e2 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/91/6e3b7bee8868cc9ac378a11ab86cfed7012c77 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/91/6e3b7bee8868cc9ac378a11ab86cfed7012c77
new file mode 100644
index 00000000..4ed81606
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/91/6e3b7bee8868cc9ac378a11ab86cfed7012c77 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/a3/a620ed31707973f26ddee45730ee70d6e11773 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/a3/a620ed31707973f26ddee45730ee70d6e11773
new file mode 100644
index 00000000..4bc9f84e
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/a3/a620ed31707973f26ddee45730ee70d6e11773 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/ac/93e4403894c426da9001459dabf36f64621f49 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/ac/93e4403894c426da9001459dabf36f64621f49
new file mode 100644
index 00000000..242e2c8b
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/ac/93e4403894c426da9001459dabf36f64621f49 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/e4/8aa4cbe35328c6da2c2b0cc7fe24a4f5d7d125 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/e4/8aa4cbe35328c6da2c2b0cc7fe24a4f5d7d125
new file mode 100644
index 00000000..9d86edc0
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/e4/8aa4cbe35328c6da2c2b0cc7fe24a4f5d7d125 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/f6/3a454d65a492bfd1f51b3174391919d018ffcc b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/f6/3a454d65a492bfd1f51b3174391919d018ffcc
new file mode 100644
index 00000000..60eea1c3
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/f6/3a454d65a492bfd1f51b3174391919d018ffcc differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/fc/c954b553ff8f4f9c00050e199439e3e2ad39eb b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/fc/c954b553ff8f4f9c00050e199439e3e2ad39eb
new file mode 100644
index 00000000..704fc7fc
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/objects/fc/c954b553ff8f4f9c00050e199439e3e2ad39eb differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/refs/heads/master b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/refs/heads/master
new file mode 100644
index 00000000..cd955787
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/git/refs/heads/master
@@ -0,0 +1,1 @@
+916e3b7bee8868cc9ac378a11ab86cfed7012c77
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/repo2_file1.txt b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/repo2_file1.txt
new file mode 100644
index 00000000..40a92f38
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/repo2_file1.txt
@@ -0,0 +1,2 @@
+This is some example text of file 1 of repo 2
+Adding another line
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/repo2_file2.txt b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/repo2_file2.txt
new file mode 100644
index 00000000..36f02e24
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo2/repo2_file2.txt
@@ -0,0 +1,1 @@
+This is some changed text of file 2 of repo 2
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/another_file.txt b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/another_file.txt
new file mode 100644
index 00000000..6fd826cb
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/another_file.txt
@@ -0,0 +1,1 @@
+There is some text in the new file
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/empty_file.txt b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/empty_file.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/COMMIT_EDITMSG b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/COMMIT_EDITMSG
new file mode 100644
index 00000000..76c97b17
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/COMMIT_EDITMSG
@@ -0,0 +1,1 @@
+Updated file 2
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/HEAD b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/HEAD
new file mode 100644
index 00000000..cb089cd8
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/HEAD
@@ -0,0 +1,1 @@
+ref: refs/heads/master
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/ORIG_HEAD b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/ORIG_HEAD
new file mode 100644
index 00000000..a97d5b66
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/ORIG_HEAD
@@ -0,0 +1,1 @@
+7cd397388ca17d2853d73d5cc0f2fc07686ad0c8
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/config b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/config
new file mode 100644
index 00000000..8ad0b1ba
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/config
@@ -0,0 +1,6 @@
+[core]
+	repositoryformatversion = 0
+	filemode = false
+	bare = false
+	logallrefupdates = true
+	ignorecase = true
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/description b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/description
new file mode 100644
index 00000000..498b267a
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/description
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/applypatch-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/applypatch-msg.sample
new file mode 100644
index 00000000..a5d7b84a
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/applypatch-msg.sample
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
+test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
+:
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/commit-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/commit-msg.sample
new file mode 100644
index 00000000..b58d1184
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/commit-msg.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/fsmonitor-watchman.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/fsmonitor-watchman.sample
new file mode 100644
index 00000000..e673bb39
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/fsmonitor-watchman.sample
@@ -0,0 +1,114 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use IPC::Open2;
+
+# An example hook script to integrate Watchman
+# (https://facebook.github.io/watchman/) with git to speed up detecting
+# new and modified files.
+#
+# The hook is passed a version (currently 1) and a time in nanoseconds
+# formatted as a string and outputs to stdout all files that have been
+# modified since the given time. Paths must be relative to the root of
+# the working tree and separated by a single NUL.
+#
+# To enable this hook, rename this file to "query-watchman" and set
+# 'git config core.fsmonitor .git/hooks/query-watchman'
+#
+my ($version, $time) = @ARGV;
+
+# Check the hook interface version
+
+if ($version == 1) {
+	# convert nanoseconds to seconds
+	$time = int $time / 1000000000;
+} else {
+	die "Unsupported query-fsmonitor hook version '$version'.\n" .
+	    "Falling back to scanning...\n";
+}
+
+my $git_work_tree;
+if ($^O =~ 'msys' || $^O =~ 'cygwin') {
+	$git_work_tree = Win32::GetCwd();
+	$git_work_tree =~ tr/\\/\//;
+} else {
+	require Cwd;
+	$git_work_tree = Cwd::cwd();
+}
+
+my $retry = 1;
+
+launch_watchman();
+
+sub launch_watchman {
+
+	my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty')
+	    or die "open2() failed: $!\n" .
+	    "Falling back to scanning...\n";
+
+	# In the query expression below we're asking for names of files that
+	# changed since $time but were not transient (ie created after
+	# $time but no longer exist).
+	#
+	# To accomplish this, we're using the "since" generator to use the
+	# recency index to select candidate nodes and "fields" to limit the
+	# output to file names only. Then we're using the "expression" term to
+	# further constrain the results.
+	#
+	# The category of transient files that we want to ignore will have a
+	# creation clock (cclock) newer than $time_t value and will also not
+	# currently exist.
+
+	my $query = <<"	END";
+		["query", "$git_work_tree", {
+			"since": $time,
+			"fields": ["name"],
+			"expression": ["not", ["allof", ["since", $time, "cclock"], ["not", "exists"]]]
+		}]
+	END
+
+	print CHLD_IN $query;
+	close CHLD_IN;
+	my $response = do {local $/; <CHLD_OUT>};
+
+	die "Watchman: command returned no output.\n" .
+	    "Falling back to scanning...\n" if $response eq "";
+	die "Watchman: command returned invalid output: $response\n" .
+	    "Falling back to scanning...\n" unless $response =~ /^\{/;
+
+	my $json_pkg;
+	eval {
+		require JSON::XS;
+		$json_pkg = "JSON::XS";
+		1;
+	} or do {
+		require JSON::PP;
+		$json_pkg = "JSON::PP";
+	};
+
+	my $o = $json_pkg->new->utf8->decode($response);
+
+	if ($retry > 0 and $o->{error} and $o->{error} =~ m/unable to resolve root .* directory (.*) is not watched/) {
+		print STDERR "Adding '$git_work_tree' to watchman's watch list.\n";
+		$retry--;
+		qx/watchman watch "$git_work_tree"/;
+		die "Failed to make watchman watch '$git_work_tree'.\n" .
+		    "Falling back to scanning...\n" if $? != 0;
+
+		# Watchman will always return all files on the first query so
+		# return the fast "everything is dirty" flag to git and do the
+		# Watchman query just to get it over with now so we won't pay
+		# the cost in git to look up each individual file.
+		print "/\0";
+		eval { launch_watchman() };
+		exit 0;
+	}
+
+	die "Watchman: $o->{error}.\n" .
+	    "Falling back to scanning...\n" if $o->{error};
+
+	binmode STDOUT, ":utf8";
+	local $, = "\0";
+	print @{$o->{files}};
+}
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/post-update.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/post-update.sample
new file mode 100644
index 00000000..ec17ec19
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/post-update.sample
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-applypatch.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-applypatch.sample
new file mode 100644
index 00000000..4142082b
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-applypatch.sample
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+precommit="$(git rev-parse --git-path hooks/pre-commit)"
+test -x "$precommit" && exec "$precommit" ${1+"$@"}
+:
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-commit.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-commit.sample
new file mode 100644
index 00000000..68d62d54
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-commit.sample
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ASCII filenames set this variable to true.
+allownonascii=$(git config --bool hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ASCII filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	cat <<\EOF
+Error: Attempt to add a non-ASCII file name.
+
+This can cause problems if you want to work with people on other platforms.
+
+To be portable it is advisable to rename the file.
+
+If you know what you are doing you can disable this check using:
+
+  git config hooks.allownonascii true
+EOF
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-push.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-push.sample
new file mode 100644
index 00000000..6187dbf4
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-push.sample
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+# An example hook script to verify what is about to be pushed.  Called by "git
+# push" after it has checked the remote status, but before anything has been
+# pushed.  If this script exits with a non-zero status nothing will be pushed.
+#
+# This hook is called with the following parameters:
+#
+# $1 -- Name of the remote to which the push is being done
+# $2 -- URL to which the push is being done
+#
+# If pushing without using a named remote those arguments will be equal.
+#
+# Information about the commits which are being pushed is supplied as lines to
+# the standard input in the form:
+#
+#   <local ref> <local sha1> <remote ref> <remote sha1>
+#
+# This sample shows how to prevent push of commits where the log message starts
+# with "WIP" (work in progress).
+
+remote="$1"
+url="$2"
+
+z40=0000000000000000000000000000000000000000
+
+while read local_ref local_sha remote_ref remote_sha
+do
+	if [ "$local_sha" = $z40 ]
+	then
+		# Handle delete
+		:
+	else
+		if [ "$remote_sha" = $z40 ]
+		then
+			# New branch, examine all commits
+			range="$local_sha"
+		else
+			# Update to existing branch, examine new commits
+			range="$remote_sha..$local_sha"
+		fi
+
+		# Check for WIP commit
+		commit=`git rev-list -n 1 --grep '^WIP' "$range"`
+		if [ -n "$commit" ]
+		then
+			echo >&2 "Found WIP commit in $local_ref, not pushing"
+			exit 1
+		fi
+	fi
+done
+
+exit 0
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-rebase.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-rebase.sample
new file mode 100644
index 00000000..6cbef5c3
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-rebase.sample
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up to date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-receive.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-receive.sample
new file mode 100644
index 00000000..a1fd29ec
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/pre-receive.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to make use of push options.
+# The example simply echoes all push options that start with 'echoback='
+# and rejects all pushes when the "reject" push option is used.
+#
+# To enable this hook, rename this file to "pre-receive".
+
+if test -n "$GIT_PUSH_OPTION_COUNT"
+then
+	i=0
+	while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
+	do
+		eval "value=\$GIT_PUSH_OPTION_$i"
+		case "$value" in
+		echoback=*)
+			echo "echo from the pre-receive-hook: ${value#*=}" >&2
+			;;
+		reject)
+			exit 1
+		esac
+		i=$((i + 1))
+	done
+fi
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/prepare-commit-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/prepare-commit-msg.sample
new file mode 100644
index 00000000..10fa14c5
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/prepare-commit-msg.sample
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples. The first one removes the
+# "# Please enter the commit message..." help message.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+COMMIT_MSG_FILE=$1
+COMMIT_SOURCE=$2
+SHA1=$3
+
+/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
+
+# case "$COMMIT_SOURCE,$SHA1" in
+#  ,|template,)
+#    /usr/bin/perl -i.bak -pe '
+#       print "\n" . `git diff --cached --name-status -r`
+# 	 if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
+#  *) ;;
+# esac
+
+# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
+# if test -z "$COMMIT_SOURCE"
+# then
+#   /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
+# fi
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/update.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/update.sample
new file mode 100644
index 00000000..80ba9413
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/hooks/update.sample
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to block unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/index b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/index
new file mode 100644
index 00000000..ee97fd6c
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/index differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/info/exclude b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/info/exclude
new file mode 100644
index 00000000..a5196d1b
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/info/exclude
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/logs/HEAD b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/logs/HEAD
new file mode 100644
index 00000000..01bbc2d4
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/logs/HEAD
@@ -0,0 +1,6 @@
+0000000000000000000000000000000000000000 7d5a746e791e512ecaa7bbf644205077e8cce10b Renata <vrenata8@gmail.com> 1559986919 +0200	commit (initial): Initial test files
+7d5a746e791e512ecaa7bbf644205077e8cce10b 7cd397388ca17d2853d73d5cc0f2fc07686ad0c8 Renata <vrenata8@gmail.com> 1560359205 +0200	commit: Updated file3
+7cd397388ca17d2853d73d5cc0f2fc07686ad0c8 7d5a746e791e512ecaa7bbf644205077e8cce10b Renata <vrenata8@gmail.com> 1560433388 +0200	reset: moving to HEAD~1
+7d5a746e791e512ecaa7bbf644205077e8cce10b f759b977c2acdb637a9b2e5b9e9c111df49daf02 Renata <vrenata8@gmail.com> 1560524579 +0200	commit: Updated file 3
+f759b977c2acdb637a9b2e5b9e9c111df49daf02 bfe46421a4e5ca657bedfceae44196fa7e02eb01 Renata <vrenata8@gmail.com> 1560525835 +0200	commit: Added a new file
+bfe46421a4e5ca657bedfceae44196fa7e02eb01 fc59e8890573dd39f45cc9e539f06989817d1124 Renata <vrenata8@gmail.com> 1560526056 +0200	commit: Updated file 2
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/logs/refs/heads/master b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/logs/refs/heads/master
new file mode 100644
index 00000000..01bbc2d4
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/logs/refs/heads/master
@@ -0,0 +1,6 @@
+0000000000000000000000000000000000000000 7d5a746e791e512ecaa7bbf644205077e8cce10b Renata <vrenata8@gmail.com> 1559986919 +0200	commit (initial): Initial test files
+7d5a746e791e512ecaa7bbf644205077e8cce10b 7cd397388ca17d2853d73d5cc0f2fc07686ad0c8 Renata <vrenata8@gmail.com> 1560359205 +0200	commit: Updated file3
+7cd397388ca17d2853d73d5cc0f2fc07686ad0c8 7d5a746e791e512ecaa7bbf644205077e8cce10b Renata <vrenata8@gmail.com> 1560433388 +0200	reset: moving to HEAD~1
+7d5a746e791e512ecaa7bbf644205077e8cce10b f759b977c2acdb637a9b2e5b9e9c111df49daf02 Renata <vrenata8@gmail.com> 1560524579 +0200	commit: Updated file 3
+f759b977c2acdb637a9b2e5b9e9c111df49daf02 bfe46421a4e5ca657bedfceae44196fa7e02eb01 Renata <vrenata8@gmail.com> 1560525835 +0200	commit: Added a new file
+bfe46421a4e5ca657bedfceae44196fa7e02eb01 fc59e8890573dd39f45cc9e539f06989817d1124 Renata <vrenata8@gmail.com> 1560526056 +0200	commit: Updated file 2
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/15/9e591cff1ecfd07de0ece98dacb69b8627d013 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/15/9e591cff1ecfd07de0ece98dacb69b8627d013
new file mode 100644
index 00000000..71e4096b
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/15/9e591cff1ecfd07de0ece98dacb69b8627d013
@@ -0,0 +1,3 @@
+x��� �f
+�P�Aw� �@
+�_@�ö��,��ח�bI�h�Ҙ0hHD�+��:5�c}Z�*HNQ�8W����yk�H�&� �~�%^
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/28/1eb1c1333d948ed9d871d6d3c5987d1832c017 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/28/1eb1c1333d948ed9d871d6d3c5987d1832c017
new file mode 100644
index 00000000..0034c109
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/28/1eb1c1333d948ed9d871d6d3c5987d1832c017 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
new file mode 100644
index 00000000..adf64119
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/57/a3cafb8ccdded2f5241975207b66094e4d7735 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/57/a3cafb8ccdded2f5241975207b66094e4d7735
new file mode 100644
index 00000000..b5dfa61e
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/57/a3cafb8ccdded2f5241975207b66094e4d7735 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/5f/49ee2d84cd72a68f221e1fa88fa90361521f63 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/5f/49ee2d84cd72a68f221e1fa88fa90361521f63
new file mode 100644
index 00000000..712a6c33
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/5f/49ee2d84cd72a68f221e1fa88fa90361521f63 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/6f/b0e24b79c5da90576284d4716f094e51428815 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/6f/b0e24b79c5da90576284d4716f094e51428815
new file mode 100644
index 00000000..ba8cebeb
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/6f/b0e24b79c5da90576284d4716f094e51428815 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/6f/d826cb4710f0f2877b65fd71aae186aeed6435 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/6f/d826cb4710f0f2877b65fd71aae186aeed6435
new file mode 100644
index 00000000..ae926f8e
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/6f/d826cb4710f0f2877b65fd71aae186aeed6435 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/7c/d397388ca17d2853d73d5cc0f2fc07686ad0c8 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/7c/d397388ca17d2853d73d5cc0f2fc07686ad0c8
new file mode 100644
index 00000000..dff8580e
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/7c/d397388ca17d2853d73d5cc0f2fc07686ad0c8 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/7d/5a746e791e512ecaa7bbf644205077e8cce10b b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/7d/5a746e791e512ecaa7bbf644205077e8cce10b
new file mode 100644
index 00000000..f67ef08b
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/7d/5a746e791e512ecaa7bbf644205077e8cce10b differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/97/4083f24d6b8a6a6592488887cf1cdaf22a2132 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/97/4083f24d6b8a6a6592488887cf1cdaf22a2132
new file mode 100644
index 00000000..8dbdb20a
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/97/4083f24d6b8a6a6592488887cf1cdaf22a2132 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/98/f2a726cc799366eb516dace7fb2f95bfb741d5 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/98/f2a726cc799366eb516dace7fb2f95bfb741d5
new file mode 100644
index 00000000..d1f03b94
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/98/f2a726cc799366eb516dace7fb2f95bfb741d5 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/b6/fd8a3b438f681629313e4acdd7728827cceae6 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/b6/fd8a3b438f681629313e4acdd7728827cceae6
new file mode 100644
index 00000000..ae368a7a
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/b6/fd8a3b438f681629313e4acdd7728827cceae6 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/bf/e46421a4e5ca657bedfceae44196fa7e02eb01 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/bf/e46421a4e5ca657bedfceae44196fa7e02eb01
new file mode 100644
index 00000000..a9949ab1
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/bf/e46421a4e5ca657bedfceae44196fa7e02eb01 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/c7/1b1fbedeaacd365ef5ae5f4792bca0dec8c98f b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/c7/1b1fbedeaacd365ef5ae5f4792bca0dec8c98f
new file mode 100644
index 00000000..e6e4d9d6
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/c7/1b1fbedeaacd365ef5ae5f4792bca0dec8c98f differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/de/97a13db5f0a17eb8971538c2d781ceb1aa167a b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/de/97a13db5f0a17eb8971538c2d781ceb1aa167a
new file mode 100644
index 00000000..395186f9
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/de/97a13db5f0a17eb8971538c2d781ceb1aa167a differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
new file mode 100644
index 00000000..71122389
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/f7/59b977c2acdb637a9b2e5b9e9c111df49daf02 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/f7/59b977c2acdb637a9b2e5b9e9c111df49daf02
new file mode 100644
index 00000000..a8f81aa5
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/f7/59b977c2acdb637a9b2e5b9e9c111df49daf02 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/fc/59e8890573dd39f45cc9e539f06989817d1124 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/fc/59e8890573dd39f45cc9e539f06989817d1124
new file mode 100644
index 00000000..902859a0
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/objects/fc/59e8890573dd39f45cc9e539f06989817d1124 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/refs/heads/master b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/refs/heads/master
new file mode 100644
index 00000000..d85047f7
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/git/refs/heads/master
@@ -0,0 +1,1 @@
+fc59e8890573dd39f45cc9e539f06989817d1124
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/repo3_file1.txt b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/repo3_file1.txt
new file mode 100644
index 00000000..159e591c
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/repo3_file1.txt
@@ -0,0 +1,3 @@
+This is some example text of file 1 of repo 2
+This file also has more lines of text
+And the third one
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/repo3_file2.txt b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/repo3_file2.txt
new file mode 100644
index 00000000..de97a13d
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/namespace/TargetRepo3/repo3_file2.txt
@@ -0,0 +1,2 @@
+This is some example text of file 2 of repo 3
+Added some more changed text
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/README.md b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/README.md
new file mode 100644
index 00000000..55f8e144
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/README.md
@@ -0,0 +1,1 @@
+TUF specification excluded `root` meta field in `snapshot.json`.
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/COMMIT_EDITMSG b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/COMMIT_EDITMSG
new file mode 100644
index 00000000..ad1245df
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/COMMIT_EDITMSG
@@ -0,0 +1,1 @@
+Readme.md
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/HEAD b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/HEAD
new file mode 100644
index 00000000..cb089cd8
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/HEAD
@@ -0,0 +1,1 @@
+ref: refs/heads/master
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/config b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/config
new file mode 100644
index 00000000..d08c739a
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/config
@@ -0,0 +1,9 @@
+[core]
+	repositoryformatversion = 0
+	filemode = false
+	bare = false
+	logallrefupdates = true
+	ignorecase = true
+[gui]
+	wmstate = normal
+	geometry = 1322x693+228+228 254 315
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/description b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/description
new file mode 100644
index 00000000..498b267a
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/description
@@ -0,0 +1,1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/gitk.cache b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/gitk.cache
new file mode 100644
index 00000000..fd4d4679
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/gitk.cache
@@ -0,0 +1,5 @@
+1 3
+4c3c1a37cc22c5a6abb110aa42bc5ed97dfb9637 491e5c80e0e1b6aa76b212cbd3f8e533f3dac9f7 {ce5a43b925d48173cd7362edafa2cdd1b4fdbbf4 491e5c80e0e1b6aa76b212cbd3f8e533f3dac9f7}
+842e8fd374ba5e3d7716912b25b7d45bc4910ec1 4c3c1a37cc22c5a6abb110aa42bc5ed97dfb9637 {02f80297e66719d5b3b07fa276884bf74a78bf99 4c3c1a37cc22c5a6abb110aa42bc5ed97dfb9637}
+ad8810a4a28014e5ea94462b9465c36e6a03725d 842e8fd374ba5e3d7716912b25b7d45bc4910ec1 842e8fd374ba5e3d7716912b25b7d45bc4910ec1
+1
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/applypatch-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/applypatch-msg.sample
new file mode 100644
index 00000000..a5d7b84a
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/applypatch-msg.sample
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
+test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
+:
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/commit-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/commit-msg.sample
new file mode 100644
index 00000000..b58d1184
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/commit-msg.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/fsmonitor-watchman.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/fsmonitor-watchman.sample
new file mode 100644
index 00000000..e673bb39
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/fsmonitor-watchman.sample
@@ -0,0 +1,114 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use IPC::Open2;
+
+# An example hook script to integrate Watchman
+# (https://facebook.github.io/watchman/) with git to speed up detecting
+# new and modified files.
+#
+# The hook is passed a version (currently 1) and a time in nanoseconds
+# formatted as a string and outputs to stdout all files that have been
+# modified since the given time. Paths must be relative to the root of
+# the working tree and separated by a single NUL.
+#
+# To enable this hook, rename this file to "query-watchman" and set
+# 'git config core.fsmonitor .git/hooks/query-watchman'
+#
+my ($version, $time) = @ARGV;
+
+# Check the hook interface version
+
+if ($version == 1) {
+	# convert nanoseconds to seconds
+	$time = int $time / 1000000000;
+} else {
+	die "Unsupported query-fsmonitor hook version '$version'.\n" .
+	    "Falling back to scanning...\n";
+}
+
+my $git_work_tree;
+if ($^O =~ 'msys' || $^O =~ 'cygwin') {
+	$git_work_tree = Win32::GetCwd();
+	$git_work_tree =~ tr/\\/\//;
+} else {
+	require Cwd;
+	$git_work_tree = Cwd::cwd();
+}
+
+my $retry = 1;
+
+launch_watchman();
+
+sub launch_watchman {
+
+	my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty')
+	    or die "open2() failed: $!\n" .
+	    "Falling back to scanning...\n";
+
+	# In the query expression below we're asking for names of files that
+	# changed since $time but were not transient (ie created after
+	# $time but no longer exist).
+	#
+	# To accomplish this, we're using the "since" generator to use the
+	# recency index to select candidate nodes and "fields" to limit the
+	# output to file names only. Then we're using the "expression" term to
+	# further constrain the results.
+	#
+	# The category of transient files that we want to ignore will have a
+	# creation clock (cclock) newer than $time_t value and will also not
+	# currently exist.
+
+	my $query = <<"	END";
+		["query", "$git_work_tree", {
+			"since": $time,
+			"fields": ["name"],
+			"expression": ["not", ["allof", ["since", $time, "cclock"], ["not", "exists"]]]
+		}]
+	END
+
+	print CHLD_IN $query;
+	close CHLD_IN;
+	my $response = do {local $/; <CHLD_OUT>};
+
+	die "Watchman: command returned no output.\n" .
+	    "Falling back to scanning...\n" if $response eq "";
+	die "Watchman: command returned invalid output: $response\n" .
+	    "Falling back to scanning...\n" unless $response =~ /^\{/;
+
+	my $json_pkg;
+	eval {
+		require JSON::XS;
+		$json_pkg = "JSON::XS";
+		1;
+	} or do {
+		require JSON::PP;
+		$json_pkg = "JSON::PP";
+	};
+
+	my $o = $json_pkg->new->utf8->decode($response);
+
+	if ($retry > 0 and $o->{error} and $o->{error} =~ m/unable to resolve root .* directory (.*) is not watched/) {
+		print STDERR "Adding '$git_work_tree' to watchman's watch list.\n";
+		$retry--;
+		qx/watchman watch "$git_work_tree"/;
+		die "Failed to make watchman watch '$git_work_tree'.\n" .
+		    "Falling back to scanning...\n" if $? != 0;
+
+		# Watchman will always return all files on the first query so
+		# return the fast "everything is dirty" flag to git and do the
+		# Watchman query just to get it over with now so we won't pay
+		# the cost in git to look up each individual file.
+		print "/\0";
+		eval { launch_watchman() };
+		exit 0;
+	}
+
+	die "Watchman: $o->{error}.\n" .
+	    "Falling back to scanning...\n" if $o->{error};
+
+	binmode STDOUT, ":utf8";
+	local $, = "\0";
+	print @{$o->{files}};
+}
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/post-update.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/post-update.sample
new file mode 100644
index 00000000..ec17ec19
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/post-update.sample
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-applypatch.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-applypatch.sample
new file mode 100644
index 00000000..4142082b
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-applypatch.sample
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+precommit="$(git rev-parse --git-path hooks/pre-commit)"
+test -x "$precommit" && exec "$precommit" ${1+"$@"}
+:
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-commit.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-commit.sample
new file mode 100644
index 00000000..68d62d54
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-commit.sample
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ASCII filenames set this variable to true.
+allownonascii=$(git config --bool hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ASCII filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	cat <<\EOF
+Error: Attempt to add a non-ASCII file name.
+
+This can cause problems if you want to work with people on other platforms.
+
+To be portable it is advisable to rename the file.
+
+If you know what you are doing you can disable this check using:
+
+  git config hooks.allownonascii true
+EOF
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-push.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-push.sample
new file mode 100644
index 00000000..6187dbf4
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-push.sample
@@ -0,0 +1,53 @@
+#!/bin/sh
+
+# An example hook script to verify what is about to be pushed.  Called by "git
+# push" after it has checked the remote status, but before anything has been
+# pushed.  If this script exits with a non-zero status nothing will be pushed.
+#
+# This hook is called with the following parameters:
+#
+# $1 -- Name of the remote to which the push is being done
+# $2 -- URL to which the push is being done
+#
+# If pushing without using a named remote those arguments will be equal.
+#
+# Information about the commits which are being pushed is supplied as lines to
+# the standard input in the form:
+#
+#   <local ref> <local sha1> <remote ref> <remote sha1>
+#
+# This sample shows how to prevent push of commits where the log message starts
+# with "WIP" (work in progress).
+
+remote="$1"
+url="$2"
+
+z40=0000000000000000000000000000000000000000
+
+while read local_ref local_sha remote_ref remote_sha
+do
+	if [ "$local_sha" = $z40 ]
+	then
+		# Handle delete
+		:
+	else
+		if [ "$remote_sha" = $z40 ]
+		then
+			# New branch, examine all commits
+			range="$local_sha"
+		else
+			# Update to existing branch, examine new commits
+			range="$remote_sha..$local_sha"
+		fi
+
+		# Check for WIP commit
+		commit=`git rev-list -n 1 --grep '^WIP' "$range"`
+		if [ -n "$commit" ]
+		then
+			echo >&2 "Found WIP commit in $local_ref, not pushing"
+			exit 1
+		fi
+	fi
+done
+
+exit 0
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-rebase.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-rebase.sample
new file mode 100644
index 00000000..6cbef5c3
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-rebase.sample
@@ -0,0 +1,169 @@
+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up to date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+<<\DOC_END
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
+
+DOC_END
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-receive.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-receive.sample
new file mode 100644
index 00000000..a1fd29ec
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/pre-receive.sample
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# An example hook script to make use of push options.
+# The example simply echoes all push options that start with 'echoback='
+# and rejects all pushes when the "reject" push option is used.
+#
+# To enable this hook, rename this file to "pre-receive".
+
+if test -n "$GIT_PUSH_OPTION_COUNT"
+then
+	i=0
+	while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
+	do
+		eval "value=\$GIT_PUSH_OPTION_$i"
+		case "$value" in
+		echoback=*)
+			echo "echo from the pre-receive-hook: ${value#*=}" >&2
+			;;
+		reject)
+			exit 1
+		esac
+		i=$((i + 1))
+	done
+fi
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/prepare-commit-msg.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/prepare-commit-msg.sample
new file mode 100644
index 00000000..10fa14c5
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/prepare-commit-msg.sample
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples. The first one removes the
+# "# Please enter the commit message..." help message.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+COMMIT_MSG_FILE=$1
+COMMIT_SOURCE=$2
+SHA1=$3
+
+/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
+
+# case "$COMMIT_SOURCE,$SHA1" in
+#  ,|template,)
+#    /usr/bin/perl -i.bak -pe '
+#       print "\n" . `git diff --cached --name-status -r`
+# 	 if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
+#  *) ;;
+# esac
+
+# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
+# if test -z "$COMMIT_SOURCE"
+# then
+#   /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
+# fi
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/update.sample b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/update.sample
new file mode 100644
index 00000000..80ba9413
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/hooks/update.sample
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# An example hook script to block unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/index b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/index
new file mode 100644
index 00000000..30d69cda
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/index differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/info/exclude b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/info/exclude
new file mode 100644
index 00000000..a5196d1b
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/info/exclude
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/logs/HEAD b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/logs/HEAD
new file mode 100644
index 00000000..dcb9b7c8
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/logs/HEAD
@@ -0,0 +1,11 @@
+0000000000000000000000000000000000000000 491e5c80e0e1b6aa76b212cbd3f8e533f3dac9f7 Renata <vrenata8@gmail.com> 1560446629 +0200	commit (initial): Initial metadata
+491e5c80e0e1b6aa76b212cbd3f8e533f3dac9f7 ce5a43b925d48173cd7362edafa2cdd1b4fdbbf4 Renata <vrenata8@gmail.com> 1560446634 +0200	commit: Added initial targets
+ce5a43b925d48173cd7362edafa2cdd1b4fdbbf4 4c3c1a37cc22c5a6abb110aa42bc5ed97dfb9637 Renata <vrenata8@gmail.com> 1560525504 +0200	commit: Targets updated
+4c3c1a37cc22c5a6abb110aa42bc5ed97dfb9637 02f80297e66719d5b3b07fa276884bf74a78bf99 Renata <vrenata8@gmail.com> 1560525797 +0200	commit: Targets updated
+02f80297e66719d5b3b07fa276884bf74a78bf99 842e8fd374ba5e3d7716912b25b7d45bc4910ec1 Renata <vrenata8@gmail.com> 1560525849 +0200	commit: Targets updated
+842e8fd374ba5e3d7716912b25b7d45bc4910ec1 ad8810a4a28014e5ea94462b9465c36e6a03725d Renata <vrenata8@gmail.com> 1560526068 +0200	commit: Targets updated
+ad8810a4a28014e5ea94462b9465c36e6a03725d 688da00443e6f40c4c4720c537c1a8a984b75aac n-dusan <nikolic.dusan.dey@gmail.com> 1646326313 +0100	commit: sign protected
+688da00443e6f40c4c4720c537c1a8a984b75aac 333ba67de88934fd499272fafb9c965d3f23de42 n-dusan <nikolic.dusan.dey@gmail.com> 1646326523 +0100	commit: sign correctly
+333ba67de88934fd499272fafb9c965d3f23de42 c3a37d316589cbf38c8f9afac043600c1390fc9f n-dusan <nikolic.dusan.dey@gmail.com> 1646332951 +0100	commit: update root exp date
+c3a37d316589cbf38c8f9afac043600c1390fc9f 7eef06574db308085c274fa35b8f36b06e50558a n-dusan <nikolic.dusan.dey@gmail.com> 1667500532 +0100	commit: Update snapshot and timestamp which excludes `root.json` in snapshot
+7eef06574db308085c274fa35b8f36b06e50558a 2fcb42319b86b1275543e41af122a6f777b8e18d n-dusan <nikolic.dusan.dey@gmail.com> 1667500647 +0100	commit: Readme.md
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/logs/refs/heads/master b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/logs/refs/heads/master
new file mode 100644
index 00000000..dcb9b7c8
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/logs/refs/heads/master
@@ -0,0 +1,11 @@
+0000000000000000000000000000000000000000 491e5c80e0e1b6aa76b212cbd3f8e533f3dac9f7 Renata <vrenata8@gmail.com> 1560446629 +0200	commit (initial): Initial metadata
+491e5c80e0e1b6aa76b212cbd3f8e533f3dac9f7 ce5a43b925d48173cd7362edafa2cdd1b4fdbbf4 Renata <vrenata8@gmail.com> 1560446634 +0200	commit: Added initial targets
+ce5a43b925d48173cd7362edafa2cdd1b4fdbbf4 4c3c1a37cc22c5a6abb110aa42bc5ed97dfb9637 Renata <vrenata8@gmail.com> 1560525504 +0200	commit: Targets updated
+4c3c1a37cc22c5a6abb110aa42bc5ed97dfb9637 02f80297e66719d5b3b07fa276884bf74a78bf99 Renata <vrenata8@gmail.com> 1560525797 +0200	commit: Targets updated
+02f80297e66719d5b3b07fa276884bf74a78bf99 842e8fd374ba5e3d7716912b25b7d45bc4910ec1 Renata <vrenata8@gmail.com> 1560525849 +0200	commit: Targets updated
+842e8fd374ba5e3d7716912b25b7d45bc4910ec1 ad8810a4a28014e5ea94462b9465c36e6a03725d Renata <vrenata8@gmail.com> 1560526068 +0200	commit: Targets updated
+ad8810a4a28014e5ea94462b9465c36e6a03725d 688da00443e6f40c4c4720c537c1a8a984b75aac n-dusan <nikolic.dusan.dey@gmail.com> 1646326313 +0100	commit: sign protected
+688da00443e6f40c4c4720c537c1a8a984b75aac 333ba67de88934fd499272fafb9c965d3f23de42 n-dusan <nikolic.dusan.dey@gmail.com> 1646326523 +0100	commit: sign correctly
+333ba67de88934fd499272fafb9c965d3f23de42 c3a37d316589cbf38c8f9afac043600c1390fc9f n-dusan <nikolic.dusan.dey@gmail.com> 1646332951 +0100	commit: update root exp date
+c3a37d316589cbf38c8f9afac043600c1390fc9f 7eef06574db308085c274fa35b8f36b06e50558a n-dusan <nikolic.dusan.dey@gmail.com> 1667500532 +0100	commit: Update snapshot and timestamp which excludes `root.json` in snapshot
+7eef06574db308085c274fa35b8f36b06e50558a 2fcb42319b86b1275543e41af122a6f777b8e18d n-dusan <nikolic.dusan.dey@gmail.com> 1667500647 +0100	commit: Readme.md
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/01/5c847991d8c975aa66638f4828b31c0f520435 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/01/5c847991d8c975aa66638f4828b31c0f520435
new file mode 100644
index 00000000..ab876c95
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/01/5c847991d8c975aa66638f4828b31c0f520435 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/02/f80297e66719d5b3b07fa276884bf74a78bf99 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/02/f80297e66719d5b3b07fa276884bf74a78bf99
new file mode 100644
index 00000000..69d7d1b5
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/02/f80297e66719d5b3b07fa276884bf74a78bf99
@@ -0,0 +1,3 @@
+x��ˎ�@D��+z��i�� e��y�˞�wM7`�c��qe�M�t�R�n箫'�D��4�%(sHeREUTH!�VQ�
+�"y.	�,J"]���X�XR!`	�(2Vp��x%�\�k��8|������_�O�S��Y���Kq��,�2��!���rS��66�k���_gX�["'���.�~sp�����uc��Į-k��R�C�N:���m�zil�z�������Hc[B3}I��r%�����~�H.ۚ��$6y�m�Ӛ��ڤ�2��q 8�pؾח��~�	B���/ih!E��NG��Q�573�MbF(s��|��Ӕ�i�j����t���~�,ו�m�.��4U%�-�.h�J3ԟM˿g���כ���,��m��^���I/�f(�܋��=�7X����3.SZ�]������������lM#m�>b$����F���ȳK��=�<�c���-����Kw}~R�"��1֣zxx"E�]�'��o#�__9��@�������ڔ�����
+n�SI��+��
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/09/9f33a42eec78ec077baef5d5c44073d3954707 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/09/9f33a42eec78ec077baef5d5c44073d3954707
new file mode 100644
index 00000000..0fa90a0b
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/09/9f33a42eec78ec077baef5d5c44073d3954707 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/0c/1f6b1a5ccc6321eff980833ceafe1f4cfb8204 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/0c/1f6b1a5ccc6321eff980833ceafe1f4cfb8204
new file mode 100644
index 00000000..f07f96b3
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/0c/1f6b1a5ccc6321eff980833ceafe1f4cfb8204 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/0d/30ea5c05a8f2aa4b9cb0789d04019685332b9a b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/0d/30ea5c05a8f2aa4b9cb0789d04019685332b9a
new file mode 100644
index 00000000..a1ff5d95
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/0d/30ea5c05a8f2aa4b9cb0789d04019685332b9a differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/0f/1d39a7798e91595409e0baa2def3a1751a6c73 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/0f/1d39a7798e91595409e0baa2def3a1751a6c73
new file mode 100644
index 00000000..0fdd6138
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/0f/1d39a7798e91595409e0baa2def3a1751a6c73 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/13/24d77f0ef7a3ec907b6b6350d9154c131aedf5 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/13/24d77f0ef7a3ec907b6b6350d9154c131aedf5
new file mode 100644
index 00000000..5332d8e2
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/13/24d77f0ef7a3ec907b6b6350d9154c131aedf5 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/15/18d940c22728160ee46f54079b25ca12d8ec8c b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/15/18d940c22728160ee46f54079b25ca12d8ec8c
new file mode 100644
index 00000000..6e5fd64c
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/15/18d940c22728160ee46f54079b25ca12d8ec8c differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/1a/6672e9913001b02ce4bde04e597c2ce5a1e465 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/1a/6672e9913001b02ce4bde04e597c2ce5a1e465
new file mode 100644
index 00000000..316e2141
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/1a/6672e9913001b02ce4bde04e597c2ce5a1e465 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/1c/af78894adf4834a5420074d38a607824ca9a7a b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/1c/af78894adf4834a5420074d38a607824ca9a7a
new file mode 100644
index 00000000..18a30fa2
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/1c/af78894adf4834a5420074d38a607824ca9a7a differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/1f/c1e32498d96c425f38813779e540f8419bd782 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/1f/c1e32498d96c425f38813779e540f8419bd782
new file mode 100644
index 00000000..4571a521
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/1f/c1e32498d96c425f38813779e540f8419bd782 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/22/2a52d3fa66586db42abcd654bc2c5f1ffae4e9 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/22/2a52d3fa66586db42abcd654bc2c5f1ffae4e9
new file mode 100644
index 00000000..14b51901
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/22/2a52d3fa66586db42abcd654bc2c5f1ffae4e9 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/22/5362b991be204786ad6317d9b0548b3548bcb1 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/22/5362b991be204786ad6317d9b0548b3548bcb1
new file mode 100644
index 00000000..d6d6aa70
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/22/5362b991be204786ad6317d9b0548b3548bcb1 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/25/3fc148011c4af334277c69ed654ae51e40e653 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/25/3fc148011c4af334277c69ed654ae51e40e653
new file mode 100644
index 00000000..92fe0636
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/25/3fc148011c4af334277c69ed654ae51e40e653 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/28/e9730874f7a6cd781a13747ed97f8616901caf b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/28/e9730874f7a6cd781a13747ed97f8616901caf
new file mode 100644
index 00000000..c414051c
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/28/e9730874f7a6cd781a13747ed97f8616901caf differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/29/0a45eb34f08c166ade366be7e26dd4bd1f70ff b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/29/0a45eb34f08c166ade366be7e26dd4bd1f70ff
new file mode 100644
index 00000000..d72234ca
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/29/0a45eb34f08c166ade366be7e26dd4bd1f70ff differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/2b/69b58e1b8cd0b9e1de567a922ac3172924dfe4 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/2b/69b58e1b8cd0b9e1de567a922ac3172924dfe4
new file mode 100644
index 00000000..6abf9efa
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/2b/69b58e1b8cd0b9e1de567a922ac3172924dfe4 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/2f/cb42319b86b1275543e41af122a6f777b8e18d b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/2f/cb42319b86b1275543e41af122a6f777b8e18d
new file mode 100644
index 00000000..9c172e99
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/2f/cb42319b86b1275543e41af122a6f777b8e18d differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/33/3ba67de88934fd499272fafb9c965d3f23de42 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/33/3ba67de88934fd499272fafb9c965d3f23de42
new file mode 100644
index 00000000..9a05178d
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/33/3ba67de88934fd499272fafb9c965d3f23de42
@@ -0,0 +1,2 @@
+x��M
+� F���K���Q��^e21�4�b�"�o��|���e]S�ڸK�1J�-PǡGCJeI�e�&t^G'>Tcn�	�Zq�p*�i��8V�)x;�����U�̷q�(�{N�$�~؍�x�+���>�:��^y ���l����9K.�Fn�!��KL
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/39/87c8278c821ca8d23a158a363380ce6bd8d1bc b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/39/87c8278c821ca8d23a158a363380ce6bd8d1bc
new file mode 100644
index 00000000..a1c34027
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/39/87c8278c821ca8d23a158a363380ce6bd8d1bc differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/39/d1c992b99c5a03656c8e40f7e993ccc5191261 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/39/d1c992b99c5a03656c8e40f7e993ccc5191261
new file mode 100644
index 00000000..cd7f92d5
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/39/d1c992b99c5a03656c8e40f7e993ccc5191261 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/3b/c94fffb63f377dd4ef9d3a25e4f88d7ecad031 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/3b/c94fffb63f377dd4ef9d3a25e4f88d7ecad031
new file mode 100644
index 00000000..0860b939
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/3b/c94fffb63f377dd4ef9d3a25e4f88d7ecad031 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/3c/a4a4e716844452c907184514a1e2722a37c2ba b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/3c/a4a4e716844452c907184514a1e2722a37c2ba
new file mode 100644
index 00000000..fa2b5b3d
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/3c/a4a4e716844452c907184514a1e2722a37c2ba differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/47/1f921fbc5a43ae8e84b62457ef48e849808a2a b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/47/1f921fbc5a43ae8e84b62457ef48e849808a2a
new file mode 100644
index 00000000..b66ca333
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/47/1f921fbc5a43ae8e84b62457ef48e849808a2a differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/48/aeed30e8b8d6dd4a1f73922440801cb5ed5a9a b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/48/aeed30e8b8d6dd4a1f73922440801cb5ed5a9a
new file mode 100644
index 00000000..328e2453
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/48/aeed30e8b8d6dd4a1f73922440801cb5ed5a9a differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/49/1e5c80e0e1b6aa76b212cbd3f8e533f3dac9f7 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/49/1e5c80e0e1b6aa76b212cbd3f8e533f3dac9f7
new file mode 100644
index 00000000..38e883ae
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/49/1e5c80e0e1b6aa76b212cbd3f8e533f3dac9f7 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/4c/3c1a37cc22c5a6abb110aa42bc5ed97dfb9637 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/4c/3c1a37cc22c5a6abb110aa42bc5ed97dfb9637
new file mode 100644
index 00000000..60ac0ff9
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/4c/3c1a37cc22c5a6abb110aa42bc5ed97dfb9637 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/4c/437ae6c4aa6de522afb8023231f90bd223b7ce b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/4c/437ae6c4aa6de522afb8023231f90bd223b7ce
new file mode 100644
index 00000000..c403075c
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/4c/437ae6c4aa6de522afb8023231f90bd223b7ce differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/53/aeeb5842aeb9e748037288b1f1e4127f95ca06 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/53/aeeb5842aeb9e748037288b1f1e4127f95ca06
new file mode 100644
index 00000000..f01b54a4
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/53/aeeb5842aeb9e748037288b1f1e4127f95ca06 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/55/f8e144cb59566ea1555e25596292fc855dfb48 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/55/f8e144cb59566ea1555e25596292fc855dfb48
new file mode 100644
index 00000000..df6c6ba1
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/55/f8e144cb59566ea1555e25596292fc855dfb48
@@ -0,0 +1,1 @@
+x���@@Ky��X���`Ĭ�L,ߙҭ`��m_ძRs�)���m�@�Yn��C�7��\���"]nJ����
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/56/f41a27eca39a7b5b59f79b7d030beaf8205ba5 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/56/f41a27eca39a7b5b59f79b7d030beaf8205ba5
new file mode 100644
index 00000000..9b5f733c
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/56/f41a27eca39a7b5b59f79b7d030beaf8205ba5 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/57/5c92b8299868115f3c9709d41b9e7195b2246f b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/57/5c92b8299868115f3c9709d41b9e7195b2246f
new file mode 100644
index 00000000..a3055155
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/57/5c92b8299868115f3c9709d41b9e7195b2246f differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/5b/60b6fc5077eb50c21a933400ce20c95cc62fb1 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/5b/60b6fc5077eb50c21a933400ce20c95cc62fb1
new file mode 100644
index 00000000..799cfcad
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/5b/60b6fc5077eb50c21a933400ce20c95cc62fb1 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/5d/4eb65ccfcd7865b273bb37ba851720c06385a9 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/5d/4eb65ccfcd7865b273bb37ba851720c06385a9
new file mode 100644
index 00000000..243774f3
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/5d/4eb65ccfcd7865b273bb37ba851720c06385a9 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/5e/2bdfc042039a841c1c4066ff04c8e1bbe02455 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/5e/2bdfc042039a841c1c4066ff04c8e1bbe02455
new file mode 100644
index 00000000..2f6fa581
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/5e/2bdfc042039a841c1c4066ff04c8e1bbe02455 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/61/807f54e0b3b3e9d52f345342a8185257ac225f b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/61/807f54e0b3b3e9d52f345342a8185257ac225f
new file mode 100644
index 00000000..40a1188c
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/61/807f54e0b3b3e9d52f345342a8185257ac225f differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/65/c9f4818f267a1ea2e7200cfde7df324ce20a33 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/65/c9f4818f267a1ea2e7200cfde7df324ce20a33
new file mode 100644
index 00000000..2c7e0aaf
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/65/c9f4818f267a1ea2e7200cfde7df324ce20a33 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/68/834dd00f566b455484e3d60b01a9778877baba b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/68/834dd00f566b455484e3d60b01a9778877baba
new file mode 100644
index 00000000..01c925fe
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/68/834dd00f566b455484e3d60b01a9778877baba
@@ -0,0 +1,4 @@
+xuR�n,E䜯͙<��v�;��	�"����l�]ʿ���ӓ�0�.����?ζu�?�{���ӳ^�z�����r�m	n�����V";��58V��>@PJ�::.�� �B�_[ؠ/��$i>�oz��P3�T�")�%x�I��]9�B�\h1
+�����ݻ4�Np�� ^j �gm��:��@��
+i@]��b���i@��+��/rݼH��w
+�h^ B�E�&�[9���V��p��	��R3�,l��98Q��+�]��0ȠQ�R�Z�]C|NKϓH\�4Br�&�<�Gg[V2?�O�ئZe]y�#,�ք*Ĭ��d��i\z���Qa��54n��#�v	ĒVc��R'm�B<W�Y��质t/�b�}��I	c,�<C�um*�Z�kϣ`C+-��+��ȡ��Y�����,ŭy~t�h��x}{�"�g}��v�ފ��?/��n�p�C�/��C���?H�U������������������r�x�����W}}����z���~y������������������
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/68/8da00443e6f40c4c4720c537c1a8a984b75aac b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/68/8da00443e6f40c4c4720c537c1a8a984b75aac
new file mode 100644
index 00000000..31a1d422
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/68/8da00443e6f40c4c4720c537c1a8a984b75aac differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/68/f88e53bc7f18a48ad7b360b555344d87c41592 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/68/f88e53bc7f18a48ad7b360b555344d87c41592
new file mode 100644
index 00000000..31c7c2de
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/68/f88e53bc7f18a48ad7b360b555344d87c41592 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/6a/a003d2040f32920d1cd5b6a14a027a46e8eca1 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/6a/a003d2040f32920d1cd5b6a14a027a46e8eca1
new file mode 100644
index 00000000..eb9a0218
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/6a/a003d2040f32920d1cd5b6a14a027a46e8eca1 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/6a/c52bf098db223b299b008ee6358b74a79fd172 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/6a/c52bf098db223b299b008ee6358b74a79fd172
new file mode 100644
index 00000000..30d06304
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/6a/c52bf098db223b299b008ee6358b74a79fd172
@@ -0,0 +1,2 @@
+xu�͎S1�Y�S\�5��?ۙ�`B#۱��3�ڂ��;�-hVH�"���Χ���p�o~�-�i��,�G?��ǻe�Ⲭ_�e7��6�R����(Qƨ��0�%�|[:�b��д��o�y�-M SU�ђ0�AXE��8���U�w�.��d�)�yO�=S@oQ��&��k��2`*(,uzj�DN�C݈�	K�КEc�j���|�֞�Hs)Ĉ�g�������@T�kd��NYk`���ή��9,��l
+'j3"��(#2�pu�-�P+�}���D���q��s�Q�hA^�R��1���С���}n��BKv�96B�ٴ��<�%�"Z����g~����ZIi�>�p6(�gA�VZ2&7�O:�I�J3�a�@o[ɥyg包�l?ɕ�K�R+�a0d�0\�O�+y�1��>�_�!rz�����|g�_�ݍ�5C��P��O���C�7�w?�ߜe=���w_N��ʲ���iw����Y�O~>���W���Ϳ�n��Ikz��_�Yq���_��0
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/73/c29ea58f9f0a4130009731defb2bbd331f08ba b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/73/c29ea58f9f0a4130009731defb2bbd331f08ba
new file mode 100644
index 00000000..20874509
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/73/c29ea58f9f0a4130009731defb2bbd331f08ba differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/76/612a4df751351b271fec0dc804502eed2bb88c b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/76/612a4df751351b271fec0dc804502eed2bb88c
new file mode 100644
index 00000000..e3874e44
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/76/612a4df751351b271fec0dc804502eed2bb88c differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7a/2892fa8e3479fe8de457ca7ff49b00c3817896 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7a/2892fa8e3479fe8de457ca7ff49b00c3817896
new file mode 100644
index 00000000..8dab74c7
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7a/2892fa8e3479fe8de457ca7ff49b00c3817896 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7a/d0b926148296507b825eb94744711e5a7d4223 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7a/d0b926148296507b825eb94744711e5a7d4223
new file mode 100644
index 00000000..170ed680
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7a/d0b926148296507b825eb94744711e5a7d4223 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7e/d9f6274a7a071f4be2f5b332c14b7be9bd0b20 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7e/d9f6274a7a071f4be2f5b332c14b7be9bd0b20
new file mode 100644
index 00000000..3f2e24ee
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7e/d9f6274a7a071f4be2f5b332c14b7be9bd0b20 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7e/ef06574db308085c274fa35b8f36b06e50558a b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7e/ef06574db308085c274fa35b8f36b06e50558a
new file mode 100644
index 00000000..f378f62c
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/7e/ef06574db308085c274fa35b8f36b06e50558a
@@ -0,0 +1,2 @@
+x���N� E]�+fol�GK!1Ɵp��a��
+4�F�{_\�.�I���s�pq�� B�V�A\l�1F�ev���(&z2O:;R:�&��f��}Ԗmt�դ�R�ک�.t��P��٨�sI��%����=S�F��ИeVj�xT��p���]���@]���Z;P	�S��)��&^A�x;�4�����r�T�����aX
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/80/2ac646a0a9936db563a11914a1c4c6ff6782e7 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/80/2ac646a0a9936db563a11914a1c4c6ff6782e7
new file mode 100644
index 00000000..741f825f
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/80/2ac646a0a9936db563a11914a1c4c6ff6782e7 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/82/2977766b433f897ebd5be79c97f9d4638c84c5 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/82/2977766b433f897ebd5be79c97f9d4638c84c5
new file mode 100644
index 00000000..8a633c83
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/82/2977766b433f897ebd5be79c97f9d4638c84c5 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/84/2e8fd374ba5e3d7716912b25b7d45bc4910ec1 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/84/2e8fd374ba5e3d7716912b25b7d45bc4910ec1
new file mode 100644
index 00000000..da60dd23
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/84/2e8fd374ba5e3d7716912b25b7d45bc4910ec1 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/85/74bedeea9b310c237d58428e81a5af7fca0e21 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/85/74bedeea9b310c237d58428e81a5af7fca0e21
new file mode 100644
index 00000000..00845083
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/85/74bedeea9b310c237d58428e81a5af7fca0e21 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/87/4022d1eaa8b65bae2b19e82bd46e7c3fd62ea8 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/87/4022d1eaa8b65bae2b19e82bd46e7c3fd62ea8
new file mode 100644
index 00000000..a4696c36
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/87/4022d1eaa8b65bae2b19e82bd46e7c3fd62ea8 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/8a/42b094d526ca6a9aeb46e649a302ceaa0e4115 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/8a/42b094d526ca6a9aeb46e649a302ceaa0e4115
new file mode 100644
index 00000000..a2c34c89
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/8a/42b094d526ca6a9aeb46e649a302ceaa0e4115
@@ -0,0 +1,3 @@
+xE�ю�6E��_a��Y��HI�}jP$Ef���2��A��^z&E`�i��.��/o�A����r��*�o_��?m�-�۶���O+#�E/���z���6)&v2�AHڭqJ̈́�G;�V���e�#[k5D��U��6��U^�!��R�D�S�� k��PG#���:���&L_�\�cu�&Bs���06)ͅ(�[vKڄ#��S�R���RiX��[�Z$z����V��|r�(k-��;Z2�Ҁ���L/��:U,޹����k����ӭ���+���<�T����*eՖ�`!�1TJ@��[���m��k����/�^����r	��1y��4 ��+B�k�d�Z�ae#�)�RsU�IJ3�Q�fˡ�"DZ���k�)XO)g�A#[w����P�^Q`O��?�y~0v��~?�����◫��o�����t�sǬ��Ci��|�������ʏD��UΗ��㟗������,���7����Y��(9�GϖQ�
+M}) v4��H�Xf�6P�b$hF�����{�T�H�tYzci"�ii�50`�������hJ�{���9�����D�9
+��״Z��9�)U��m�̑�%�iTN�B��7�m��|}ξ������r���X�S�/�/g�O?��X�]��c����)�
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/8d/60a48c3ba31eaf3556c072cee20bbd41d3a03e b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/8d/60a48c3ba31eaf3556c072cee20bbd41d3a03e
new file mode 100644
index 00000000..9df07d8e
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/8d/60a48c3ba31eaf3556c072cee20bbd41d3a03e differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/8e/7afcdb0a7e0fa2a5ca9284265ff7f8c3e6705d b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/8e/7afcdb0a7e0fa2a5ca9284265ff7f8c3e6705d
new file mode 100644
index 00000000..56175e23
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/8e/7afcdb0a7e0fa2a5ca9284265ff7f8c3e6705d differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/91/8a3d1dcd8cd5ee646716f96cea14d94f88e572 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/91/8a3d1dcd8cd5ee646716f96cea14d94f88e572
new file mode 100644
index 00000000..200c5eaf
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/91/8a3d1dcd8cd5ee646716f96cea14d94f88e572
@@ -0,0 +1,1 @@
+xK��OR05g��RPP�K�M-.HLNU�RP�/JO�ˬJ,���SҁIe�KK2�R�j���
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/92/b42eead65171346dedb62bdac49ce87f99ade0 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/92/b42eead65171346dedb62bdac49ce87f99ade0
new file mode 100644
index 00000000..8f66c83f
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/92/b42eead65171346dedb62bdac49ce87f99ade0 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/96/c2b930f8179073bc08e127561cb673f95e2e63 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/96/c2b930f8179073bc08e127561cb673f95e2e63
new file mode 100644
index 00000000..b37d3357
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/96/c2b930f8179073bc08e127561cb673f95e2e63 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/9b/d755dfb50ad4daac8f6ab8e697ab521d92c560 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/9b/d755dfb50ad4daac8f6ab8e697ab521d92c560
new file mode 100644
index 00000000..45f85a82
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/9b/d755dfb50ad4daac8f6ab8e697ab521d92c560 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/9c/e2cf4821328548ea18fd5d2af0ecf20530a65a b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/9c/e2cf4821328548ea18fd5d2af0ecf20530a65a
new file mode 100644
index 00000000..29c96d17
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/9c/e2cf4821328548ea18fd5d2af0ecf20530a65a differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/a8/0baffc200bbc0b53bdf525ee22d5ffd1eebdc5 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/a8/0baffc200bbc0b53bdf525ee22d5ffd1eebdc5
new file mode 100644
index 00000000..68745e37
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/a8/0baffc200bbc0b53bdf525ee22d5ffd1eebdc5 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/a8/c2cf4a9804305c945e4f09089f2ccab2a6f21f b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/a8/c2cf4a9804305c945e4f09089f2ccab2a6f21f
new file mode 100644
index 00000000..deb83af5
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/a8/c2cf4a9804305c945e4f09089f2ccab2a6f21f differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/aa/16c8eb61178dbfff1e759db1b81e6fba64c43d b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/aa/16c8eb61178dbfff1e759db1b81e6fba64c43d
new file mode 100644
index 00000000..2ec8bf17
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/aa/16c8eb61178dbfff1e759db1b81e6fba64c43d differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ad/8810a4a28014e5ea94462b9465c36e6a03725d b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ad/8810a4a28014e5ea94462b9465c36e6a03725d
new file mode 100644
index 00000000..98a05b6f
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ad/8810a4a28014e5ea94462b9465c36e6a03725d differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ae/38a86da241523e368cd2849beafa5bc407308a b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ae/38a86da241523e368cd2849beafa5bc407308a
new file mode 100644
index 00000000..ea7415a8
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ae/38a86da241523e368cd2849beafa5bc407308a differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/bb/0b1c71b55d0ad4e320db04336da7dd6beed3d0 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/bb/0b1c71b55d0ad4e320db04336da7dd6beed3d0
new file mode 100644
index 00000000..fdbd7772
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/bb/0b1c71b55d0ad4e320db04336da7dd6beed3d0 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/bb/ab5d3b7b989dc316193a6082fccf46a8aae258 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/bb/ab5d3b7b989dc316193a6082fccf46a8aae258
new file mode 100644
index 00000000..aa5a6659
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/bb/ab5d3b7b989dc316193a6082fccf46a8aae258 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/bd/93835dd878ce4b18f73d5c0b6921d8596cf541 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/bd/93835dd878ce4b18f73d5c0b6921d8596cf541
new file mode 100644
index 00000000..0812dcb8
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/bd/93835dd878ce4b18f73d5c0b6921d8596cf541 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/c1/b32900542f6398b92f8a2838cf1b94138df584 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/c1/b32900542f6398b92f8a2838cf1b94138df584
new file mode 100644
index 00000000..51f78931
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/c1/b32900542f6398b92f8a2838cf1b94138df584 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/c3/a37d316589cbf38c8f9afac043600c1390fc9f b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/c3/a37d316589cbf38c8f9afac043600c1390fc9f
new file mode 100644
index 00000000..c734b431
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/c3/a37d316589cbf38c8f9afac043600c1390fc9f differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cb/6e3f8067ddc2388480d0750a3eade7a716abba b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cb/6e3f8067ddc2388480d0750a3eade7a716abba
new file mode 100644
index 00000000..5fac5413
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cb/6e3f8067ddc2388480d0750a3eade7a716abba
@@ -0,0 +1,1 @@
+xK��OR0�d��RPP�K�M-.HLNU�RP*N��,(MM��WҁI��r˕�j�{�
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cc/0071b0a7e9a677a06b71ac46ddb2df73969e52 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cc/0071b0a7e9a677a06b71ac46ddb2df73969e52
new file mode 100644
index 00000000..5ae031ad
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cc/0071b0a7e9a677a06b71ac46ddb2df73969e52 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ce/5a43b925d48173cd7362edafa2cdd1b4fdbbf4 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ce/5a43b925d48173cd7362edafa2cdd1b4fdbbf4
new file mode 100644
index 00000000..cdf53028
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ce/5a43b925d48173cd7362edafa2cdd1b4fdbbf4 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cf/4e96ecb9973bf5789caeadc90324d8227c0d89 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cf/4e96ecb9973bf5789caeadc90324d8227c0d89
new file mode 100644
index 00000000..3f4c205d
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cf/4e96ecb9973bf5789caeadc90324d8227c0d89 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cf/5db84d26e37df219118bd86c0164c7a98f7838 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cf/5db84d26e37df219118bd86c0164c7a98f7838
new file mode 100644
index 00000000..2f4ce26b
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/cf/5db84d26e37df219118bd86c0164c7a98f7838 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d3/daa497678eb283f3419e3234beea8b89fdaf50 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d3/daa497678eb283f3419e3234beea8b89fdaf50
new file mode 100644
index 00000000..18df7e1c
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d3/daa497678eb283f3419e3234beea8b89fdaf50 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d5/925a295bae9f8a565b55bb6db025cbc28f5818 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d5/925a295bae9f8a565b55bb6db025cbc28f5818
new file mode 100644
index 00000000..c09a1ef3
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d5/925a295bae9f8a565b55bb6db025cbc28f5818 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d7/b712d2493524939a60eccdc9f724cfc1a946c0 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d7/b712d2493524939a60eccdc9f724cfc1a946c0
new file mode 100644
index 00000000..9ece59ca
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d7/b712d2493524939a60eccdc9f724cfc1a946c0 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d9/d4e525b67a337da81ce641a1208fbfd901b33d b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d9/d4e525b67a337da81ce641a1208fbfd901b33d
new file mode 100644
index 00000000..300f74ca
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/d9/d4e525b67a337da81ce641a1208fbfd901b33d differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/dc/2c8fa08e7b39b9b0f5f78ae47cc48a2839aaf4 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/dc/2c8fa08e7b39b9b0f5f78ae47cc48a2839aaf4
new file mode 100644
index 00000000..a70961b1
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/dc/2c8fa08e7b39b9b0f5f78ae47cc48a2839aaf4 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/df/d3b863b7103b82c767976f72287dc63c526759 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/df/d3b863b7103b82c767976f72287dc63c526759
new file mode 100644
index 00000000..fb46310a
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/df/d3b863b7103b82c767976f72287dc63c526759 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e0/5c999e9cd276d801cd2675d60e30f8ddc06a57 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e0/5c999e9cd276d801cd2675d60e30f8ddc06a57
new file mode 100644
index 00000000..4299a877
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e0/5c999e9cd276d801cd2675d60e30f8ddc06a57 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e5/7e330fab88a173417a821deb978d83fe213990 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e5/7e330fab88a173417a821deb978d83fe213990
new file mode 100644
index 00000000..f8c4a0eb
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e5/7e330fab88a173417a821deb978d83fe213990 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e7/38a6cc2b31dbebd84a47b940b7ec61dc7144be b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e7/38a6cc2b31dbebd84a47b940b7ec61dc7144be
new file mode 100644
index 00000000..18ca871b
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e7/38a6cc2b31dbebd84a47b940b7ec61dc7144be differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e8/3a40972db42f53e81bd2d86b13b7d1d2212941 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e8/3a40972db42f53e81bd2d86b13b7d1d2212941
new file mode 100644
index 00000000..47ac3670
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/e8/3a40972db42f53e81bd2d86b13b7d1d2212941 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/eb/0f560f68680f0034f7fd7c74dbb31c5232f4de b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/eb/0f560f68680f0034f7fd7c74dbb31c5232f4de
new file mode 100644
index 00000000..774e3f44
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/eb/0f560f68680f0034f7fd7c74dbb31c5232f4de differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/eb/21a7f422febead674a43f1f2806b2456dbebc2 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/eb/21a7f422febead674a43f1f2806b2456dbebc2
new file mode 100644
index 00000000..0fca6902
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/eb/21a7f422febead674a43f1f2806b2456dbebc2 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/f0/c2b50387e9a636544bbbb15aead25ea6d752b3 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/f0/c2b50387e9a636544bbbb15aead25ea6d752b3
new file mode 100644
index 00000000..d8108a50
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/f0/c2b50387e9a636544bbbb15aead25ea6d752b3 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/f2/73df00f0e20a93f26c9fb762f51c728289fe30 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/f2/73df00f0e20a93f26c9fb762f51c728289fe30
new file mode 100644
index 00000000..f92b285e
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/f2/73df00f0e20a93f26c9fb762f51c728289fe30 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ff/27b88e347830b481124309af0e773d9aacf104 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ff/27b88e347830b481124309af0e773d9aacf104
new file mode 100644
index 00000000..fa221f3a
Binary files /dev/null and b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/objects/ff/27b88e347830b481124309af0e773d9aacf104 differ
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/refs/heads/master b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/refs/heads/master
new file mode 100644
index 00000000..bb668b68
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/git/refs/heads/master
@@ -0,0 +1,1 @@
+2fcb42319b86b1275543e41af122a6f777b8e18d
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/1.root.json b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/1.root.json
new file mode 100644
index 00000000..3ca4a4e7
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/1.root.json
@@ -0,0 +1,119 @@
+{
+ "signatures": [
+  {
+   "keyid": "863325ec38f08293ffca7ba3671b3d45d6eab194351664ed5da0d92ace99af91",
+   "sig": "06cbac7c251ee57bd290b04d835eb6fe1c1339d39ff9c193f17f8cf357c4bf02cfeb92ec3cdc161a10adb1ed8cbfc04cae39f9683326529a5b5b6a6c31da5f7d2c4fbf69a7c0f69d0aed1cacb483d9bb7e30ebf5b8dcf13b8c8608282a36d4dc7dc431c0b30be386d096d65b44e685df965bc1a985281b3591edd70b4007610970899594727e7291353705b1c8ff06563f0609b8eb0f5af4292219d4eb6cbc1454f3309c843fce4cb36c75e7b272b98d1b7609e14bc2497c24181d1dc0a4e251ba590cb3c74aac8c2a6f46561e94b36c40b52984c307026cce4ce12830e475103b9adfbe070470613a33f8581efea09645667529e12679040d49184362f9aa9d"
+  },
+  {
+   "keyid": "ab15675f9b3006aab621ac23e197709e8c289f79633e5dd798b5e5e2b3b19f50",
+   "sig": "b87da15216a8820bbc1fd4c343b695c32e4b81d7b1946b3d1aeb9f7b9e29d5860587d71e0a0f60b72dfbc72f376bd5eb9c5d44957f94b1dbec38412a7a25d5394f19fe56222256f6f47be481da3758e05e1b12c74a9d307ec035f56725eb13ed4a03a31fb7dc6996480cd14bd231e3dbf82bd0618531368e15100a15cfa9791f8702e5069cccee62cc3e32540dfbda571f70523bd70a5c52c791f78fa7efc41217e7939f24530e1d7a7bd53d5c046f1bbdacb0f3046ce3567a2bbf64adef365f32cba8927a0767e02f34fcd7358db0eb05168210826676ac76c25b14375fe4a45d26492edde5a33c9ff69d30132ca457b0ead3d65ece5cea940b38614a2dc264"
+  },
+  {
+   "keyid": "40ecbcb2cd365c3245202ddc4e0c73087f1c0edf9f2de59d3915c07b65b67668",
+   "sig": "3fb11e5932edcefd9af76b770ceeaca4606919a4931482417f7d83e5f7343990f0639a684b7cf41057c5f7fe194803cb05f3c8f32590a7b97285ca717813c8761210f1c025326b91580f4103b93934650cf8926d79dc538db10a60acb6be5f42f06af955d0b9899c74e6541e09a9bb7b40743ce4d6d94bbcfc41623a709540eec48b6228e96cac2e02a117f53076f4098d1af688a87d4bfda29ba0b83f92cdeca765070ae5f14115c2f23374758a88bd38c1ddcf083acfd3048e0f6b603e90d703d58d75b63c9ee646fa68a1d134571f65ddbd588bba7b77185317ec89640c05f520fe1a1a74a5e5a797a5e9d173fa47294555941dbf4590a7e5ac16fa5d3b89"
+  }
+ ],
+ "signed": {
+  "_type": "root",
+  "consistent_snapshot": false,
+  "expires": "2020-06-12T23:12:09Z",
+  "keys": {
+   "40ecbcb2cd365c3245202ddc4e0c73087f1c0edf9f2de59d3915c07b65b67668": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA552O9PX6L8snG/nZdZAe\nuFgIUk8uJihwCJi8Wk2n2kb4+80mMfOItJHcngpcyuPyoUKUAEj5XkK5b+nbGA67\nXa9BcCEGzw1dS0RSkJsL2iStgeprJxmnb0tOYkgjFB3p0agvyVvOCfNWkg4BxnX9\nJqiGRVJkTugkzExZRqop7miJsj1m6YEpbSmfRdWjTz1AuSsVCsXjkS9b1BIgQBZs\nj8x1o98pozmSBsmnc9TsruSUNQX67ZCNFNAhPGKksqQA9L7WAYSN5CP39T7yJE1U\nCByB/qFwGuxrqofmzpsbDg70aGP/UK+0uaqI5Pfwq+rtxCyNr/gOO6UsXATcDxGD\nZQIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "589a4f5fdf7a289071726f4981da0ca0743faceacea60bd1608d3c61f376f4ec": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtWRrSKtnvbgwzS7VuBVR\nqiYac4pIREIakkofd+NtMYiMtNlV6Dh1KX327Fa2HxFZKr+krcdi0zTVo1tURNME\n61QEVwMNANpDv1mYuBmdDpm/fXViFi32Yw3OQB3Auw9vFLx3VkVdltrtmGHs1Sg4\ngtdVWsFcGDv1D4N3z3m/fCef39OlhVfOmwe3nJJsvZAlBJINa34PvXnkrZ3r+YCD\nb0RNHyJYdAdt/dcpwq+h83NwfHA4bDegjoA7k3B00YPqaQECD5U+thqqF+uaMoVZ\nnCcdtMDQQ0EoqKG+N+cp8+ivdESqtUVuUUaD3gBVtDolByuNW/7/uBG4fRE1Jph9\nHwIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "863325ec38f08293ffca7ba3671b3d45d6eab194351664ed5da0d92ace99af91": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5EGVh9xqVFFHnGGIofks\ncA3vHWFs1QP60QTX+ZJUPiUJdDb8wuJ6mu9d8bKojE3SEVHCLpJeV4+muMnLtZWq\nAipiuFUU9QDpOYaqQ5SD5n/9sZfiWDzjVsqZA4WMj0OCd/Bkn+umz3ljHFe0EJUE\nCxYRvmArC05UyJej7fCaQ/cD7QELrpmBaE2qLcG0Vfirz9NekaXixGiKNiIjHAj6\nYwIfES9SycVo42LEOskGFciqgfZJVtSaTIurW+KnOToStazEWY8okon91s+5ltIN\nOS68TtBLtph5PXcLhqSozE8SqMW3gZni6zXHHQtuouFLdGkgw+0V2YLX15Ka78zj\nhQIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "ab15675f9b3006aab621ac23e197709e8c289f79633e5dd798b5e5e2b3b19f50": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvkrFf48hTimH2vfqgD5d\ntB5tRFQnZaat5wSmczTgz01wzl/T0/nL6rxnSw4yACnyUcJyxTP8bzLm3aJz63el\nIm91ef65/OVPBbXowoDB/u70lhn8mvT5LTWs9yBKOPQG92cHt2UwcGgPhWwA0wVn\nu1TFtca5hONGNNkpd/bNnbCCfw1awvYXF+FD7WCnzhvq/mZwgklN5ZHNZJp0KBuD\nXi3walJ/0nffvjVSCcTAYMHPLd8SKF+N9yjSDerJ+opk6/8+TnihgXdcCyvh9O+/\nNhVF1BWh+Hv++Ery63tl7N793MSUbJqXsX3Mmf1v7h+8uDRHWwVtN5VHy9XNmysm\nIwIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "cf70c2c4ac749948ca495f9275ceb8525cfb7c463118b54ca5be844ca5cfc0d6": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwv8CwlU44Y6ERLZI4OYb\nOKL7YgdJzwgDHBBqVw0IOwEvPrK52YJgIUlgkX/POqb3qQnOkwQza5ZZgn2akn3g\nI6Zs9ZCV0t7ZNLX955Uzoul0WfA+EFUA1VI5ujMBH8E9YOKiokCa6rFxgY+9RTrH\nPuIZTySLOTN8je9E9DsdKOkXQXtUvoZlOqM8AbKcywR1CVSKAqmXNkf55txhdXg7\nNoDoK4T1w7Qxfed9Wgruch/12b5cvY6VsQKGOPZ+HbQBN5+wXopezyPBUj1k7qjn\nF+i9FBjKHM62G4mQ3s1iAs7qg6xCjQP4pW3Q6gN5i0iStgmHy1FoynouVtQAc++N\n/QIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "d36f105af5bdb063d1005ee254e7e236b8dc116097a6dd78a22111b1d429533f": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwN5AWXl26xlAy+Mii9tA\nwXobOP+zUsoqwNKZu355MCzpMRzHqhWe07iDPyeC+ewbSmeWvpIEOwCWh2DyHsFy\nV7FsDHJiiuFHZcAbxTu1zVBf2FwNcQNfNXUr3ShmcyFZrKq6ZaaslD0mhSqdFwVe\nnEke0ufF9yroV4U3IC00KaMOxDT0EH3q1S8SbNtNh4VIQaSwn5CaNpIXek080oQR\nkXLxJivHJfHIq0iFmXdjNr6TXYNygCBGf2nE0R3X+bVt7xF8/dbanfWn+Z04+ZKs\naTaMuOEGLgfchv33neLcCBKp+fKojEcEpVE6g18KPt2So+s3hSHODzP3V3oUYo8E\nlQIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   }
+  },
+  "roles": {
+   "root": {
+    "keyids": [
+     "863325ec38f08293ffca7ba3671b3d45d6eab194351664ed5da0d92ace99af91",
+     "40ecbcb2cd365c3245202ddc4e0c73087f1c0edf9f2de59d3915c07b65b67668",
+     "ab15675f9b3006aab621ac23e197709e8c289f79633e5dd798b5e5e2b3b19f50"
+    ],
+    "threshold": 2
+   },
+   "snapshot": {
+    "keyids": [
+     "589a4f5fdf7a289071726f4981da0ca0743faceacea60bd1608d3c61f376f4ec"
+    ],
+    "threshold": 1
+   },
+   "targets": {
+    "keyids": [
+     "d36f105af5bdb063d1005ee254e7e236b8dc116097a6dd78a22111b1d429533f"
+    ],
+    "threshold": 1
+   },
+   "timestamp": {
+    "keyids": [
+     "cf70c2c4ac749948ca495f9275ceb8525cfb7c463118b54ca5be844ca5cfc0d6"
+    ],
+    "threshold": 1
+   }
+  },
+  "spec_version": "1.0",
+  "version": 1
+ }
+}
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/2.root.json b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/2.root.json
new file mode 100644
index 00000000..1324d77f
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/2.root.json
@@ -0,0 +1,119 @@
+{
+ "signatures": [
+  {
+   "keyid": "40ecbcb2cd365c3245202ddc4e0c73087f1c0edf9f2de59d3915c07b65b67668",
+   "sig": "8e0c74add01e503c2767b9f95543149bb3b529b56b5da07d38f10a61f2695ab53804527935bcd39222ed46fc9c3ef73877cc9caa62705b15d0d901772c71e241a0d6449bb7b8b7d1297b69730ac7b597e9f9406b517ad224e2a824163a54f10b9af89a0be0b95dc35255e3a690ec573ec05cdb10f4bc5685aa67fd42ed608ba0f55433bca643421d979c56a6bb0c6c73fd02a8adc70488f2be6ce35c28873b9ade32befdb0566f67fb5ae055c9b9c650feaa1490d05ad53d925b010dfa5057e00cd6091a94dd40d9064af2da23dceca2111f494d4c38ca9f2ee2e53a88478039cc1cc4ea37960fa5c4d8c83bfc27b724ce6e8fb129b42620bfcd332bd1c3d796"
+  },
+  {
+   "keyid": "ab15675f9b3006aab621ac23e197709e8c289f79633e5dd798b5e5e2b3b19f50",
+   "sig": "1f5c5db9596411e97b008945687fcca6064903084782e8bb8670910737dd01e65f9e0e2f2d91f0e881a7f9e8ef65e7e3c4e70780958d24b0e951af04cdfc14d8025d87feee9e4e02b98b6464764437ea6a2751a86fa53564d670ed700cb3a5748d97c75b5de02dd32d0c254f509f929b44a7eff5069db4444d61eaffeef5c09a94ba407dfe80e8203d3e07bf1e66098b799286a4b7dbc807b4edf99f3cee9345f5495b997a6dcc97a4a3e4ce2e1fd477ab8466e441ce08c239b9e5e7d6acc41be9df78f6ee85b88a252373821afc4ec116eb39a845289bf9c90defbe24e0476e320846ce36de094586b54d5fe34200ca0eaff55bafb301de5284e30a1717c194"
+  },
+  {
+   "keyid": "863325ec38f08293ffca7ba3671b3d45d6eab194351664ed5da0d92ace99af91",
+   "sig": "d5241edede241a508eae0eb68fa4e3e4286eb3437ccb96c63527a2e6c201b4fe57ce979a5612623d00dd69c223effcfead748f91598edaebd6402a51e5b05cce0ad11851883b1905d94066a11d27e00d7a8ec19f22f24fcb920f801947142abaddb4d4449201e17f293daf55f43b70c6b59dfaf0a56fd22f1c3a3c9c2098a5be6d634c830d4a2220e081616a41e5b04b012d403a571d9a0df16e883468801c5bb564de7fc9ab0f1909ad8cd9d167121b17759142e6cf82ef13cc208a19865d17ef90f9d9619247bbfc31776c2ae10aa99985a507e8d4061638714ac52679b824810763a91933a75e8784a9cc935743e434d0af101c7bf559edaf5bae55a57964"
+  }
+ ],
+ "signed": {
+  "_type": "root",
+  "consistent_snapshot": false,
+  "expires": "2023-03-03T19:41:58Z",
+  "keys": {
+   "40ecbcb2cd365c3245202ddc4e0c73087f1c0edf9f2de59d3915c07b65b67668": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA552O9PX6L8snG/nZdZAe\nuFgIUk8uJihwCJi8Wk2n2kb4+80mMfOItJHcngpcyuPyoUKUAEj5XkK5b+nbGA67\nXa9BcCEGzw1dS0RSkJsL2iStgeprJxmnb0tOYkgjFB3p0agvyVvOCfNWkg4BxnX9\nJqiGRVJkTugkzExZRqop7miJsj1m6YEpbSmfRdWjTz1AuSsVCsXjkS9b1BIgQBZs\nj8x1o98pozmSBsmnc9TsruSUNQX67ZCNFNAhPGKksqQA9L7WAYSN5CP39T7yJE1U\nCByB/qFwGuxrqofmzpsbDg70aGP/UK+0uaqI5Pfwq+rtxCyNr/gOO6UsXATcDxGD\nZQIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "589a4f5fdf7a289071726f4981da0ca0743faceacea60bd1608d3c61f376f4ec": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtWRrSKtnvbgwzS7VuBVR\nqiYac4pIREIakkofd+NtMYiMtNlV6Dh1KX327Fa2HxFZKr+krcdi0zTVo1tURNME\n61QEVwMNANpDv1mYuBmdDpm/fXViFi32Yw3OQB3Auw9vFLx3VkVdltrtmGHs1Sg4\ngtdVWsFcGDv1D4N3z3m/fCef39OlhVfOmwe3nJJsvZAlBJINa34PvXnkrZ3r+YCD\nb0RNHyJYdAdt/dcpwq+h83NwfHA4bDegjoA7k3B00YPqaQECD5U+thqqF+uaMoVZ\nnCcdtMDQQ0EoqKG+N+cp8+ivdESqtUVuUUaD3gBVtDolByuNW/7/uBG4fRE1Jph9\nHwIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "863325ec38f08293ffca7ba3671b3d45d6eab194351664ed5da0d92ace99af91": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5EGVh9xqVFFHnGGIofks\ncA3vHWFs1QP60QTX+ZJUPiUJdDb8wuJ6mu9d8bKojE3SEVHCLpJeV4+muMnLtZWq\nAipiuFUU9QDpOYaqQ5SD5n/9sZfiWDzjVsqZA4WMj0OCd/Bkn+umz3ljHFe0EJUE\nCxYRvmArC05UyJej7fCaQ/cD7QELrpmBaE2qLcG0Vfirz9NekaXixGiKNiIjHAj6\nYwIfES9SycVo42LEOskGFciqgfZJVtSaTIurW+KnOToStazEWY8okon91s+5ltIN\nOS68TtBLtph5PXcLhqSozE8SqMW3gZni6zXHHQtuouFLdGkgw+0V2YLX15Ka78zj\nhQIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "ab15675f9b3006aab621ac23e197709e8c289f79633e5dd798b5e5e2b3b19f50": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvkrFf48hTimH2vfqgD5d\ntB5tRFQnZaat5wSmczTgz01wzl/T0/nL6rxnSw4yACnyUcJyxTP8bzLm3aJz63el\nIm91ef65/OVPBbXowoDB/u70lhn8mvT5LTWs9yBKOPQG92cHt2UwcGgPhWwA0wVn\nu1TFtca5hONGNNkpd/bNnbCCfw1awvYXF+FD7WCnzhvq/mZwgklN5ZHNZJp0KBuD\nXi3walJ/0nffvjVSCcTAYMHPLd8SKF+N9yjSDerJ+opk6/8+TnihgXdcCyvh9O+/\nNhVF1BWh+Hv++Ery63tl7N793MSUbJqXsX3Mmf1v7h+8uDRHWwVtN5VHy9XNmysm\nIwIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "cf70c2c4ac749948ca495f9275ceb8525cfb7c463118b54ca5be844ca5cfc0d6": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwv8CwlU44Y6ERLZI4OYb\nOKL7YgdJzwgDHBBqVw0IOwEvPrK52YJgIUlgkX/POqb3qQnOkwQza5ZZgn2akn3g\nI6Zs9ZCV0t7ZNLX955Uzoul0WfA+EFUA1VI5ujMBH8E9YOKiokCa6rFxgY+9RTrH\nPuIZTySLOTN8je9E9DsdKOkXQXtUvoZlOqM8AbKcywR1CVSKAqmXNkf55txhdXg7\nNoDoK4T1w7Qxfed9Wgruch/12b5cvY6VsQKGOPZ+HbQBN5+wXopezyPBUj1k7qjn\nF+i9FBjKHM62G4mQ3s1iAs7qg6xCjQP4pW3Q6gN5i0iStgmHy1FoynouVtQAc++N\n/QIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "d36f105af5bdb063d1005ee254e7e236b8dc116097a6dd78a22111b1d429533f": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwN5AWXl26xlAy+Mii9tA\nwXobOP+zUsoqwNKZu355MCzpMRzHqhWe07iDPyeC+ewbSmeWvpIEOwCWh2DyHsFy\nV7FsDHJiiuFHZcAbxTu1zVBf2FwNcQNfNXUr3ShmcyFZrKq6ZaaslD0mhSqdFwVe\nnEke0ufF9yroV4U3IC00KaMOxDT0EH3q1S8SbNtNh4VIQaSwn5CaNpIXek080oQR\nkXLxJivHJfHIq0iFmXdjNr6TXYNygCBGf2nE0R3X+bVt7xF8/dbanfWn+Z04+ZKs\naTaMuOEGLgfchv33neLcCBKp+fKojEcEpVE6g18KPt2So+s3hSHODzP3V3oUYo8E\nlQIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   }
+  },
+  "roles": {
+   "root": {
+    "keyids": [
+     "863325ec38f08293ffca7ba3671b3d45d6eab194351664ed5da0d92ace99af91",
+     "40ecbcb2cd365c3245202ddc4e0c73087f1c0edf9f2de59d3915c07b65b67668",
+     "ab15675f9b3006aab621ac23e197709e8c289f79633e5dd798b5e5e2b3b19f50"
+    ],
+    "threshold": 2
+   },
+   "snapshot": {
+    "keyids": [
+     "589a4f5fdf7a289071726f4981da0ca0743faceacea60bd1608d3c61f376f4ec"
+    ],
+    "threshold": 1
+   },
+   "targets": {
+    "keyids": [
+     "d36f105af5bdb063d1005ee254e7e236b8dc116097a6dd78a22111b1d429533f"
+    ],
+    "threshold": 1
+   },
+   "timestamp": {
+    "keyids": [
+     "cf70c2c4ac749948ca495f9275ceb8525cfb7c463118b54ca5be844ca5cfc0d6"
+    ],
+    "threshold": 1
+   }
+  },
+  "spec_version": "1.0",
+  "version": 2
+ }
+}
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/root.json b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/root.json
new file mode 100644
index 00000000..1324d77f
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/root.json
@@ -0,0 +1,119 @@
+{
+ "signatures": [
+  {
+   "keyid": "40ecbcb2cd365c3245202ddc4e0c73087f1c0edf9f2de59d3915c07b65b67668",
+   "sig": "8e0c74add01e503c2767b9f95543149bb3b529b56b5da07d38f10a61f2695ab53804527935bcd39222ed46fc9c3ef73877cc9caa62705b15d0d901772c71e241a0d6449bb7b8b7d1297b69730ac7b597e9f9406b517ad224e2a824163a54f10b9af89a0be0b95dc35255e3a690ec573ec05cdb10f4bc5685aa67fd42ed608ba0f55433bca643421d979c56a6bb0c6c73fd02a8adc70488f2be6ce35c28873b9ade32befdb0566f67fb5ae055c9b9c650feaa1490d05ad53d925b010dfa5057e00cd6091a94dd40d9064af2da23dceca2111f494d4c38ca9f2ee2e53a88478039cc1cc4ea37960fa5c4d8c83bfc27b724ce6e8fb129b42620bfcd332bd1c3d796"
+  },
+  {
+   "keyid": "ab15675f9b3006aab621ac23e197709e8c289f79633e5dd798b5e5e2b3b19f50",
+   "sig": "1f5c5db9596411e97b008945687fcca6064903084782e8bb8670910737dd01e65f9e0e2f2d91f0e881a7f9e8ef65e7e3c4e70780958d24b0e951af04cdfc14d8025d87feee9e4e02b98b6464764437ea6a2751a86fa53564d670ed700cb3a5748d97c75b5de02dd32d0c254f509f929b44a7eff5069db4444d61eaffeef5c09a94ba407dfe80e8203d3e07bf1e66098b799286a4b7dbc807b4edf99f3cee9345f5495b997a6dcc97a4a3e4ce2e1fd477ab8466e441ce08c239b9e5e7d6acc41be9df78f6ee85b88a252373821afc4ec116eb39a845289bf9c90defbe24e0476e320846ce36de094586b54d5fe34200ca0eaff55bafb301de5284e30a1717c194"
+  },
+  {
+   "keyid": "863325ec38f08293ffca7ba3671b3d45d6eab194351664ed5da0d92ace99af91",
+   "sig": "d5241edede241a508eae0eb68fa4e3e4286eb3437ccb96c63527a2e6c201b4fe57ce979a5612623d00dd69c223effcfead748f91598edaebd6402a51e5b05cce0ad11851883b1905d94066a11d27e00d7a8ec19f22f24fcb920f801947142abaddb4d4449201e17f293daf55f43b70c6b59dfaf0a56fd22f1c3a3c9c2098a5be6d634c830d4a2220e081616a41e5b04b012d403a571d9a0df16e883468801c5bb564de7fc9ab0f1909ad8cd9d167121b17759142e6cf82ef13cc208a19865d17ef90f9d9619247bbfc31776c2ae10aa99985a507e8d4061638714ac52679b824810763a91933a75e8784a9cc935743e434d0af101c7bf559edaf5bae55a57964"
+  }
+ ],
+ "signed": {
+  "_type": "root",
+  "consistent_snapshot": false,
+  "expires": "2023-03-03T19:41:58Z",
+  "keys": {
+   "40ecbcb2cd365c3245202ddc4e0c73087f1c0edf9f2de59d3915c07b65b67668": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA552O9PX6L8snG/nZdZAe\nuFgIUk8uJihwCJi8Wk2n2kb4+80mMfOItJHcngpcyuPyoUKUAEj5XkK5b+nbGA67\nXa9BcCEGzw1dS0RSkJsL2iStgeprJxmnb0tOYkgjFB3p0agvyVvOCfNWkg4BxnX9\nJqiGRVJkTugkzExZRqop7miJsj1m6YEpbSmfRdWjTz1AuSsVCsXjkS9b1BIgQBZs\nj8x1o98pozmSBsmnc9TsruSUNQX67ZCNFNAhPGKksqQA9L7WAYSN5CP39T7yJE1U\nCByB/qFwGuxrqofmzpsbDg70aGP/UK+0uaqI5Pfwq+rtxCyNr/gOO6UsXATcDxGD\nZQIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "589a4f5fdf7a289071726f4981da0ca0743faceacea60bd1608d3c61f376f4ec": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtWRrSKtnvbgwzS7VuBVR\nqiYac4pIREIakkofd+NtMYiMtNlV6Dh1KX327Fa2HxFZKr+krcdi0zTVo1tURNME\n61QEVwMNANpDv1mYuBmdDpm/fXViFi32Yw3OQB3Auw9vFLx3VkVdltrtmGHs1Sg4\ngtdVWsFcGDv1D4N3z3m/fCef39OlhVfOmwe3nJJsvZAlBJINa34PvXnkrZ3r+YCD\nb0RNHyJYdAdt/dcpwq+h83NwfHA4bDegjoA7k3B00YPqaQECD5U+thqqF+uaMoVZ\nnCcdtMDQQ0EoqKG+N+cp8+ivdESqtUVuUUaD3gBVtDolByuNW/7/uBG4fRE1Jph9\nHwIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "863325ec38f08293ffca7ba3671b3d45d6eab194351664ed5da0d92ace99af91": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5EGVh9xqVFFHnGGIofks\ncA3vHWFs1QP60QTX+ZJUPiUJdDb8wuJ6mu9d8bKojE3SEVHCLpJeV4+muMnLtZWq\nAipiuFUU9QDpOYaqQ5SD5n/9sZfiWDzjVsqZA4WMj0OCd/Bkn+umz3ljHFe0EJUE\nCxYRvmArC05UyJej7fCaQ/cD7QELrpmBaE2qLcG0Vfirz9NekaXixGiKNiIjHAj6\nYwIfES9SycVo42LEOskGFciqgfZJVtSaTIurW+KnOToStazEWY8okon91s+5ltIN\nOS68TtBLtph5PXcLhqSozE8SqMW3gZni6zXHHQtuouFLdGkgw+0V2YLX15Ka78zj\nhQIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "ab15675f9b3006aab621ac23e197709e8c289f79633e5dd798b5e5e2b3b19f50": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvkrFf48hTimH2vfqgD5d\ntB5tRFQnZaat5wSmczTgz01wzl/T0/nL6rxnSw4yACnyUcJyxTP8bzLm3aJz63el\nIm91ef65/OVPBbXowoDB/u70lhn8mvT5LTWs9yBKOPQG92cHt2UwcGgPhWwA0wVn\nu1TFtca5hONGNNkpd/bNnbCCfw1awvYXF+FD7WCnzhvq/mZwgklN5ZHNZJp0KBuD\nXi3walJ/0nffvjVSCcTAYMHPLd8SKF+N9yjSDerJ+opk6/8+TnihgXdcCyvh9O+/\nNhVF1BWh+Hv++Ery63tl7N793MSUbJqXsX3Mmf1v7h+8uDRHWwVtN5VHy9XNmysm\nIwIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "cf70c2c4ac749948ca495f9275ceb8525cfb7c463118b54ca5be844ca5cfc0d6": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwv8CwlU44Y6ERLZI4OYb\nOKL7YgdJzwgDHBBqVw0IOwEvPrK52YJgIUlgkX/POqb3qQnOkwQza5ZZgn2akn3g\nI6Zs9ZCV0t7ZNLX955Uzoul0WfA+EFUA1VI5ujMBH8E9YOKiokCa6rFxgY+9RTrH\nPuIZTySLOTN8je9E9DsdKOkXQXtUvoZlOqM8AbKcywR1CVSKAqmXNkf55txhdXg7\nNoDoK4T1w7Qxfed9Wgruch/12b5cvY6VsQKGOPZ+HbQBN5+wXopezyPBUj1k7qjn\nF+i9FBjKHM62G4mQ3s1iAs7qg6xCjQP4pW3Q6gN5i0iStgmHy1FoynouVtQAc++N\n/QIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   },
+   "d36f105af5bdb063d1005ee254e7e236b8dc116097a6dd78a22111b1d429533f": {
+    "keyid_hash_algorithms": [
+     "sha256",
+     "sha512"
+    ],
+    "keytype": "rsa",
+    "keyval": {
+     "public": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwN5AWXl26xlAy+Mii9tA\nwXobOP+zUsoqwNKZu355MCzpMRzHqhWe07iDPyeC+ewbSmeWvpIEOwCWh2DyHsFy\nV7FsDHJiiuFHZcAbxTu1zVBf2FwNcQNfNXUr3ShmcyFZrKq6ZaaslD0mhSqdFwVe\nnEke0ufF9yroV4U3IC00KaMOxDT0EH3q1S8SbNtNh4VIQaSwn5CaNpIXek080oQR\nkXLxJivHJfHIq0iFmXdjNr6TXYNygCBGf2nE0R3X+bVt7xF8/dbanfWn+Z04+ZKs\naTaMuOEGLgfchv33neLcCBKp+fKojEcEpVE6g18KPt2So+s3hSHODzP3V3oUYo8E\nlQIDAQAB\n-----END PUBLIC KEY-----"
+    },
+    "scheme": "rsassa-pss-sha256"
+   }
+  },
+  "roles": {
+   "root": {
+    "keyids": [
+     "863325ec38f08293ffca7ba3671b3d45d6eab194351664ed5da0d92ace99af91",
+     "40ecbcb2cd365c3245202ddc4e0c73087f1c0edf9f2de59d3915c07b65b67668",
+     "ab15675f9b3006aab621ac23e197709e8c289f79633e5dd798b5e5e2b3b19f50"
+    ],
+    "threshold": 2
+   },
+   "snapshot": {
+    "keyids": [
+     "589a4f5fdf7a289071726f4981da0ca0743faceacea60bd1608d3c61f376f4ec"
+    ],
+    "threshold": 1
+   },
+   "targets": {
+    "keyids": [
+     "d36f105af5bdb063d1005ee254e7e236b8dc116097a6dd78a22111b1d429533f"
+    ],
+    "threshold": 1
+   },
+   "timestamp": {
+    "keyids": [
+     "cf70c2c4ac749948ca495f9275ceb8525cfb7c463118b54ca5be844ca5cfc0d6"
+    ],
+    "threshold": 1
+   }
+  },
+  "spec_version": "1.0",
+  "version": 2
+ }
+}
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/snapshot.json b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/snapshot.json
new file mode 100644
index 00000000..d9d4e525
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/snapshot.json
@@ -0,0 +1,19 @@
+{
+ "signatures": [
+  {
+   "keyid": "589a4f5fdf7a289071726f4981da0ca0743faceacea60bd1608d3c61f376f4ec",
+   "sig": "5838bebb0c2c9e10620840d52b5be9af41adc871922e2c1d45878ad0dd223331cb102107d40027e596dac45120185cb50859cd415a29335679282435c7674f8a16c2313a92f3bc1597d0ae98eee4aea7c26aabc405b542e35212e03fbf73625384571cf32fcca74ae209c6245c96aa3d86b41a4984978c22ca32c5a611bbc537f8af645d78f7fbd975b9140fd49887d14def801f6ff2bfa66d1e0415bf8469d480e5d0b288e7b66dbfefcb1e05ea5ca2c5a0e1701b924c447d55976c026cf4399a8354b60178f9ef47418fbf9ddbe3e3b4e35ea9f88bdebb53e18c01ed618c972b092539f80584c0674e7f1a86b0fdb073893d50f7d78baf263fdcc6bbcf2623"
+  }
+ ],
+ "signed": {
+  "_type": "snapshot",
+  "expires": "2022-11-10T19:35:13Z",
+  "meta": {
+   "targets.json": {
+    "version": 8
+   }
+  },
+  "spec_version": "1.0.0",
+  "version": 10
+ }
+}
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/targets.json b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/targets.json
new file mode 100644
index 00000000..28e97308
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/targets.json
@@ -0,0 +1,55 @@
+{
+ "signatures": [
+  {
+   "keyid": "d36f105af5bdb063d1005ee254e7e236b8dc116097a6dd78a22111b1d429533f",
+   "sig": "7c2a24e0ea14b628d225f9883951f886cde39f9611893bd4fbfdfb7218c16497cf3517f43cd7862e659f5862360912711a3a1372dec9bd49da723ae385d657cfa2c9e77e3c5e738e9ba6226edd2fde494955adb0eeba2f7825634e7f3330ed595b79ac50e2dd97a7bd95b649e6b46056e83e39aa7231f6e19ce0193f56d19c82e215756dbe80ad1b4f3de2acca441d851513e98da86b1302e72b65f910f3bc35f8a754a09c595945a6309ddadcd7a724b1eef065f67341d286d9006f7ee97d97383fae11cea52040d5fa87d82de306b03bad818626a1b7cc062082be020dc831840e79e58ecb1a9dd6865bc3934fccdbca602bfee62d47cbf1f7ae7b68ccf882"
+  }
+ ],
+ "signed": {
+  "_type": "targets",
+  "delegations": {
+   "keys": {},
+   "roles": []
+  },
+  "expires": "2022-06-01T17:54:46Z",
+  "spec_version": "1.0",
+  "targets": {
+   "namespace/TargetRepo1": {
+    "hashes": {
+     "sha256": "49c9aff149767a80588d1ff425b5515d126e8db953e941376c289054e1710330",
+     "sha512": "5de9d5a284d173cbd652f32760221660cb47d7e9d1bcc5556ff3427566829e4ab7b873d961c9bb4b4fcfc34e5f5f59661fa266120438c9a33221be759dae36dc"
+    },
+    "length": 60
+   },
+   "namespace/TargetRepo2": {
+    "hashes": {
+     "sha256": "b863edd44ec17c7050d168d6e186bbc3c5ee0b22a8916eb0d58ba118b9ea4948",
+     "sha512": "6c240b921e4fcf2708f7d7d29bdb9795925a52d909a30d86a5eb9454fa83f87af8e2088ffeb23851cb54c90d06fb97b690a46220478d4aa45995c685c2da11b0"
+    },
+    "length": 60
+   },
+   "namespace/TargetRepo3": {
+    "hashes": {
+     "sha256": "144d0127b370516c72c4dda85b0860f722dcf4b3c384c4f4403113a3ff3eba07",
+     "sha512": "b82b095237e6f03750db4d172778a895e40e1c16c4ac74ff22ee569b30a17c164f3a8f63c95748c6df759c8168700e5975e5c8afed1f7484d4987db9c340bf3e"
+    },
+    "length": 60
+   },
+   "protected/info.json": {
+    "hashes": {
+     "sha256": "eca3eab22a8feecda82105a8df5e27a9fd44a3f5799fd1928378a6d17b56b091",
+     "sha512": "2de2ca7a47cef80efc6a7da145eedfead6a8138dd444cdc1aacb827a54a2cf721ad584823b09973e572f32212851ec6ff6ebcb2da37f07ac86a4b288997299b5"
+    },
+    "length": 57
+   },
+   "repositories.json": {
+    "hashes": {
+     "sha256": "6eb85d294f36f78607c665a400bd7b89f6d216b2c9aab81df6e121a4df876db1",
+     "sha512": "2def4d0e1ab5bfdebdcd998c0f5b1859ced3874ed3e8e34248a9eb319430d336a9b10995f135322284789fa06346effd77e7a3c68706b408dbdf2382810fc2dc"
+    },
+    "length": 501
+   }
+  },
+  "version": 8
+ }
+}
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/timestamp.json b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/timestamp.json
new file mode 100644
index 00000000..8a42b094
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/metadata/timestamp.json
@@ -0,0 +1,24 @@
+{
+ "signatures": [
+  {
+   "keyid": "cf70c2c4ac749948ca495f9275ceb8525cfb7c463118b54ca5be844ca5cfc0d6",
+   "sig": "3ac43fab6440f3b025ed3fc9a53c36da4a21749adbe770f779bd871ad90a3ad2b845e3615bbfc476e891bd1919ed05eaaefd7264aa59dc62c02883f1dfc6c5aa0d2cea55fdecb545b4a6ff9aeb1899be1635189cc90358c4cc4c2244641b0af6175250376c3de9376678e62addd13d40c76e8cce0415f3cbfa9e01ebf4c75320e764edc0fbb185622395f262bb9ec4287c6d2adfadad983537a94747400d34adb205ba88ba0f10c2e4f6d219f64d187d943da3fed6a6570e0d74512360fa31e1bf968ce19c15ee0706b2137d8dddad030661dc42065c9a3c15470904cba29bdd4cde17ab2651ff2cea02246c23f9a18c47aeb90c85837ae6cf5c472a57e732a1"
+  }
+ ],
+ "signed": {
+  "_type": "timestamp",
+  "expires": "2022-11-04T19:35:13Z",
+  "meta": {
+   "snapshot.json": {
+    "hashes": {
+     "sha256": "917f78582b3df51b88b5f1fe2ca42c1b411c4aaae6a991982a3d62514c5cbdd2",
+     "sha512": "4bdc25cdb77975db3fd9d16127a6a6a2863d16f9a1b502f7e3b008b40038fbfeb33ba77f5584e2a2ec1e3cfbfa229dd470cbba5630b4ee2f66faae4644ac6499"
+    },
+    "length": 816,
+    "version": 10
+   }
+  },
+  "spec_version": "1.0.0",
+  "version": 10
+ }
+}
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/namespace/TargetRepo1 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/namespace/TargetRepo1
new file mode 100644
index 00000000..5e2bdfc0
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/namespace/TargetRepo1
@@ -0,0 +1,3 @@
+{
+    "commit": "b047c591809362a0b155d18839df22acb9c4c409"
+}
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/namespace/TargetRepo2 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/namespace/TargetRepo2
new file mode 100644
index 00000000..0d30ea5c
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/namespace/TargetRepo2
@@ -0,0 +1,3 @@
+{
+    "commit": "916e3b7bee8868cc9ac378a11ab86cfed7012c77"
+}
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/namespace/TargetRepo3 b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/namespace/TargetRepo3
new file mode 100644
index 00000000..8574bede
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/namespace/TargetRepo3
@@ -0,0 +1,3 @@
+{
+    "commit": "fc59e8890573dd39f45cc9e539f06989817d1124"
+}
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/protected/info.json b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/protected/info.json
new file mode 100644
index 00000000..918a3d1d
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/protected/info.json
@@ -0,0 +1,4 @@
+{
+  "namespace": "organization",
+  "name":  "auth_repo"
+}
\ No newline at end of file
diff --git a/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/repositories.json b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/repositories.json
new file mode 100644
index 00000000..76612a4d
--- /dev/null
+++ b/taf/tests/data/repos/test-updater/test-updater-invalid-snapshot-meta-field-missing/organization/auth_repo/targets/repositories.json
@@ -0,0 +1,19 @@
+{
+    "repositories": {
+        "namespace/TargetRepo1": {
+            "urls": [
+                "../../../origin/test-updater-valid/namespace/TargetRepo1"
+            ]
+        },
+        "namespace/TargetRepo2": {
+            "urls": [
+                "../../../origin/test-updater-valid/namespace/TargetRepo2"
+            ]
+        },
+        "namespace/TargetRepo3": {
+            "urls": [
+                "../../../origin/test-updater-valid/namespace/TargetRepo3"
+            ]
+        }
+    }
+}
\ No newline at end of file
diff --git a/taf/tests/test_updater.py b/taf/tests/test_updater.py
index 36b089fe..77be6c80 100644
--- a/taf/tests/test_updater.py
+++ b/taf/tests/test_updater.py
@@ -78,6 +78,7 @@
 NO_REPOSITORY_INFO_JSON = "Error during info.json parse. When specifying --clients-library-dir check if info.json metadata exists in targets/protected or provide full path to auth repo"
 ROOT_EXPIRED = "Final root.json is expired"
 REPLAYED_METADATA = "New timestamp version 3 must be >= 4"
+METADATA_FIELD_MISSING = "New snapshot is missing info for 'root.json'"
 IS_A_TEST_REPO = f"Repository {AUTH_REPO_REL_PATH} is a test repository."
 NOT_A_TEST_REPO = f"Repository {AUTH_REPO_REL_PATH} is not a test repository."
 LAST_VALIDATED_COMMIT_MISMATCH = "Saved last validated commit {} of repository {} does not match the current head commit {}"
@@ -244,6 +245,11 @@ def test_no_update_necessary(
         ("test-updater-updated-root-n-root-missing", NO_WORKING_MIRRORS, True),
         ("test-updater-updated-root-invalid-metadata", NO_WORKING_MIRRORS, True),
         ("test-updater-info-missing", NO_REPOSITORY_INFO_JSON, False),
+        (
+            "test-updater-invalid-snapshot-meta-field-missing",
+            METADATA_FIELD_MISSING,
+            False,
+        ),
     ],
 )
 def test_updater_invalid_update(