Fed up with conflicts, Sally decides to lock pb.c
so only she can modify it.
The decentralized architecture required us to make certain compromises in the implementation of this feature. Obtaining a lock requires a live network connection to wherever you normally push. It is also possible to create local changesets which violate a lock about which you are not yet aware, which will result in a lock violation error later when you attempt to push those changes. |
lottery sally$ vv lock src/pb.c Pulling... Done. Pushing... Done.
Harry updates his repository instance.
lottery harry$ vv pull Pulling from http://server.futilisoft.com:8080/repos/lottery: Pulling... Done. lottery harry$ vv update lottery harry$ ls -l total 32 -rw-r--r-- 1 harry staff 66 May 31 10:58 Makefile -rwxr-xr-x 1 harry staff 8952 May 31 10:58 pb drwxr-xr-x 3 harry staff 102 May 31 10:58 src
Pants! That Sally must be in a nark. She’s deleted all his email code!
Harry decides to indent[36] pb.c
.
lottery harry$ indent src/pb.c lottery sally$ vv commit -m "indent our code" vv: Error 164 (sglib): Lock violation: @/src/pb.c is locked by sally
Such a mithering. Harry calms down and reverts the changes.
In this case, the commit failed with a lock violation because Harry did a pull after Sally grabbed the lock. If he had not, the commit would have succeeded, but a subsequent attempt to push would have failed. |
lottery harry$ vv revert src/pb.c lottery harry$ vv st Found: @/pb Found: @/pb.c.BAK lottery harry$ rm src/pb.c.BAK
Sally, basking in the comfort of her lock, makes her edits. She has
decided to eliminate uses of atoi()
, which is deprecated.
lottery sally$ vv diff === ================ === Modified: File @/src/pb.c --- @/src/pb.c eb093372fc2d0461465c2fbc0fef5dea54c4c898 +++ @/src/pb.c 2011/05/31 16:27:06.000 +0000 @@ -43,7 +43,14 @@ int white_balls[5]; for (int i=0; i<5; i++) { - white_balls[i] = atoi(argv[1+i]); + char* endptr = NULL; + long val = strtol(argv[1+i], &endptr, 10); + if (*endptr) + { + fprintf(stderr, "Invalid arguments\n"); + return -1; + } + white_balls[i] = (int) val; } int result = calculate_result(white_balls, power_ball); lottery sally$ make gcc -std=c99 -Wall -Wextra -Werror pb.c -o pb lottery sally$ ./pb 1 2 3 4 5 6 0 percent chance of winning lottery sally$ ./pb 1 2 3e 4 5 6 Invalid arguments
And she commits her changes, lickety split.
lottery sally$ vv commit -m "use strtol. atoi is deprecated." revision: 17:d934a35fc8eda4fec7cb6b0d049e3881cd0e4a1d branch: master who: sally when: 2011/05/31 11:28:05.327 -0500 comment: use strtol. atoi is deprecated. parent: 16:7590c00819c05cd2103b29216350377c0746ae13 lottery sally$ vv push Pushing to http://server.futilisoft.com:8080/repos/lottery: Pushing... Done.
Veracity does not automatically remove a lock upon commit. Locks must be explicitly removed. |
lottery sally$ vv unlock src/pb.c