/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2019, Google Inc. * * v4l2_compat_manager.h - V4L2 compatibility manager */ #pragma once #include #include #include #include #include #include #include "v4l2_camera_proxy.h" class V4L2CompatManager { public: struct FileOperations { using openat_func_t = int (*)(int dirfd, const char *path, int oflag, ...); using dup_func_t = int (*)(int oldfd); using close_func_t = int (*)(int fd); using ioctl_func_t = int (*)(int fd, unsigned long request, ...); using mmap_func_t = void *(*)(void *addr, size_t length, int prot, int flags, int fd, off64_t offset); using munmap_func_t = int (*)(void *addr, size_t length); openat_func_t openat; dup_func_t dup; close_func_t close; ioctl_func_t ioctl; mmap_func_t mmap; munmap_func_t munmap; }; static V4L2CompatManager *instance(); const FileOperations &fops() const { return fops_; } int openat(int dirfd, const char *path, int oflag, mode_t mode); int dup(int oldfd); int close(int fd); void *mmap(void *addr, size_t length, int prot, int flags, int fd, off64_t offset); int munmap(void *addr, size_t length); int ioctl(int fd, unsigned long request, void *arg); private: V4L2CompatManager(); ~V4L2CompatManager(); int start(); int getCameraIndex(int fd); std::shared_ptr cameraFile(int fd); FileOperations fops_; libcamera::CameraManager *cm_; std::vector> proxies_; std::map> files_; std::map> mmaps_; }; rtl/libcamera.git/log/utils/hooks/pre-push?h=rpi/streams/next'>logtreecommitdiff
blob: 2417d379db4ce5f7cb5fc37a8850ada097b42bb8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/sh

# SPDX-License-Identifier: GPL-2.0-or-later

# A hook script to prevent pushing unsuitable commits to the master branch.
# Unsuitable commits are commits that contain a local changelog below a '---'
# line. The criteria may get extended later.
#
# 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>

z40=0000000000000000000000000000000000000000

while read -r local_ref local_sha remote_ref remote_sha
do
	if [ "$remote_ref" != refs/heads/master ]
	then
		continue
	fi

	# The remote master branch should never get deleted by this push, so we
	# can assume that local_sha is not 0's. We may however be creating the
	# remote branch, when pushing to a new empty repository for instance.
	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

	#
	# Find invalid commits.
	#
	errors=0
	for commit in $(git rev-list "$range")
	do
		msg=$(git cat-file commit "$commit")

		# 1. The commit message shall not contain a local changelog.
		if echo "$msg" | grep -q '^--- *$'
		then
			echo >&2 "Found local changelog in commit $commit"
			errors=$((errors+1))
		fi

		# 2. The commit message shall have a Signed-off-by line
		# corresponding the committer.
		committer=$(echo "$msg" | grep '^committer ' | head -1 | \
				cut -d ' ' -f 2- | rev | cut -d ' ' -f 3- | rev)
		if ! echo "$msg" | grep -F -q "Signed-off-by: ${committer}"
		then
			echo >&2 "Missing committer Signed-off-by in commit $commit"
			errors=$((errors+1))
		fi

		# 3. A Reviewed-by or Acked-by is required.
		if ! echo "$msg" | grep -q '^\(Reviewed\|Acked\)-by: '
		then
			echo >&2 "No Reviewed-by or Acked-by in commit $commit"
			errors=$((errors+1))
		fi
	done

	if [ $errors != 0 ]
	then
		echo >&2 "Found $errors errors in $local_ref, not pushing"
		exit 1
	fi
done

exit 0